JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<<widget clothingShop>> <div class="flex flex-row gap-2 mb-2"> <<if !$filter>> <<set $filter = _args[0]>> <</if>> <<link "Outfits">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'outfit'}>> <</link>> <<link "Underwear">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'underwear'}>> <</link>> <<link "Shoes">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'shoes'}>> <</link>> <<link "Legwear">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'legwear'}>> <</link>> <<if _args[2] === 'sex_shop'>> <<link "Sex Toys">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'buttwear'}>> <</link>> <</if>> <<link "Accessories">> <<goto _args[1]>> <<set $filter = {'filter': _args[2], 'slot': 'accessories'}>> <</link>> </div> <div class="grid grid-cols-3 gap-5"> <<for _itemKey, _itemObj range $clothingItems>> <<if _itemObj.filter == $filter.filter && ( ($filter.slot == 'accessories' && (_itemObj.slot == 'earring' || _itemObj.slot == 'neckwear')) || (_itemObj.slot == $filter.slot && $filter.slot != 'accessories') )>> <<set _image = _itemObj.asset >> <div class="default-container gap-1"> <<image _image>> <p class="text-sm text-center"> <<print _itemObj.name>> </p> <p class="text-sm text-center"> Cost: $<<print _itemObj.cost>> </p> <<capture _itemKey>> <<if hasItem(_itemKey, 'clothing')>> <span class="text-xs text-gray-400 text-center">You've already bought this item.</span> <<elseif !wantBuyItem(_itemKey)>> <span class="text-xs text-gray-400 text-center">You don't feel comfortable buying this item.</span> <<linkDisabled $clothingItems[_itemKey].reqs>> Buy! <</linkDisabled>> <<elseif canBuyItem(_itemKey, $clothingItems)>> <<link "Buy!">> <<set $selectedItem = _itemKey>> <<goto "ClothingPurchase">> <</link>> <<else>> <<set _reqs = {'money': _itemObj.cost}>> <<linkDisabled _reqs>> Buy! <</linkDisabled>> <</if>> <</capture>> </div> <</if>> <</for>> </div> <</widget>>
<<widget "hjSequence">> <<if $hjStep is undefined>><<set $hjStep = 1>><</if>> <div id="hj-sequence"> <<if $hjStep == 1>> <p class="text-center">You're giving a handjob</p> <<bodyMedia 'actions.work.gloryhole.handjob'>> <div class="link-container"> <<link "Keep Going">> <<set $hjStep = 2>> <<replace "#hj-sequence">><<hjSequence>><</replace>> <</link>> </div> <</if>> <<if $hjStep == 2>> <<bodyMedia 'actions.work.gloryhole.handjob'>> <p class="text-center">You're picking up the pace</p> <div class="link-container"> <<link "Swallow">> <<set $hjStep = 'swallow'>> <<replace "#hj-sequence">><<hjSequence>><</replace>> <</link>> <<link "Facial">> <<set $hjStep = 'facial'>> <<replace "#hj-sequence">><<hjSequence>><</replace>> <</link>> </div> <</if>> <<if $hjStep == 'swallow'>> <p class="text-center">You swallow the cum.</p> <<bodyMedia 'actions.work.gloryhole.finish.swallow'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $hjStep)>> <<set $ghAction = ''>> <<set $hjStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $hjStep == 'facial'>> <p class="text-center">You take the cum on your face.</p> <<bodyMedia 'actions.work.gloryhole.finish.facial'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $hjStep)>> <<set $ghAction = ''>> <<set $hjStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>> <<widget "bjSequence">> <<if $bjStep is undefined>><<set $bjStep = 1>><</if>> <div id="bj-sequence"> <<if $bjStep == 1>> <p class="text-center">You're giving a blowjob</p> <<bodyMedia 'actions.work.gloryhole.blowjob'>> <div class="link-container"> <<link "Keep Going">> <<set $bjStep = 2>> <<replace "#bj-sequence">><<bjSequence>><</replace>> <</link>> </div> <</if>> <<if $bjStep == 2>> <p class="text-center">You're picking up the pace</p> <<bodyMedia 'actions.work.gloryhole.blowjob'>> <div class="link-container"> <<link "Swallow">> <<set $bjStep = 'swallow'>> <<replace "#bj-sequence">><<bjSequence>><</replace>> <</link>> <<link "Facial">> <<set $bjStep = 'facial'>> <<replace "#bj-sequence">><<bjSequence>><</replace>> <</link>> </div> <</if>> <<if $bjStep == 'swallow'>> <p class="text-center">You swallow the cum.</p> <<bodyMedia 'actions.work.gloryhole.finish.swallow'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $bjStep)>> <<set $ghAction = ''>> <<set $bjStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $bjStep == 'facial'>> <p class="text-center">You take the cum on your face.</p> <<bodyMedia 'actions.work.gloryhole.finish.facial'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $bjStep)>> <<set $ghAction = ''>> <<set $bjStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>> <<widget "ghSexSequence">> <<if $ghSexStep is undefined>><<set $ghSexStep = 1>><</if>> <div id="gh-sex-sequence"> <<if $ghSexStep == 1>> <p class="text-center">You're having sex</p> <<bodyMedia 'actions.work.gloryhole.sex'>> <div class="link-container"> <<link "Keep Going">> <<set $ghSexStep = 2>> <<replace "#gh-sex-sequence">><<ghSexSequence>><</replace>> <</link>> </div> <</if>> <<if $ghSexStep == 2>> <p class="text-center">You're still having sex</p> <<bodyMedia 'actions.work.gloryhole.sex'>> <div class="link-container"> <<link "Cum Inside">> <<set $ghSexStep = 'inside'>> <<replace "#gh-sex-sequence">><<ghSexSequence>><</replace>> <</link>> <<link "Cum Outside">> <<set $ghSexStep = 'outside'>> <<replace "#gh-sex-sequence">><<ghSexSequence>><</replace>> <</link>> </div> <</if>> <<if $ghSexStep == 'inside'>> <p class="text-center">You got cummed inside.</p> <<bodyMedia 'actions.work.gloryhole.finish.inside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghSexStep)>> <<set $ghAction = ''>> <<set $ghSexStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghSexStep == 'outside'>> <p class="text-center">You got cummed outside.</p> <<bodyMedia 'actions.work.gloryhole.finish.outside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghSexStep)>> <<set $ghAction = ''>> <<set $ghSexStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>> <<widget "ghAnalSequence">> <<if $ghAnalStep is undefined>><<set $ghAnalStep = 1>><</if>> <div id="gh-anal-sequence"> <<if $ghAnalStep == 1>> <p class="text-center">You're having anal sex</p> <<bodyMedia 'actions.work.gloryhole.anal'>> <div class="link-container"> <<link "Keep Going">> <<set $ghAnalStep = 2>> <<replace "#gh-anal-sequence">><<ghAnalSequence>><</replace>> <</link>> </div> <</if>> <<if $ghAnalStep == 2>> <p class="text-center">You're still having anal sex</p> <<bodyMedia 'actions.work.gloryhole.anal'>> <div class="link-container"> <<link "Cum Inside">> <<set $ghAnalStep = 'inside'>> <<replace "#gh-anal-sequence">><<ghAnalSequence>><</replace>> <</link>> <<link "Cum Outside">> <<set $ghAnalStep = 'outside'>> <<replace "#gh-anal-sequence">><<ghAnalSequence>><</replace>> <</link>> </div> <</if>> <<if $ghAnalStep == 'inside'>> <p class="text-center">You got cummed inside.</p> <<bodyMedia 'actions.work.gloryhole.finish.inside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghAnalStep)>> <<set $ghAction = ''>> <<set $ghAnalStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghAnalStep == 'outside'>> <p class="text-center">You got cummed outside.</p> <<bodyMedia 'actions.work.gloryhole.finish.outside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghAnalStep)>> <<set $ghAction = ''>> <<set $ghAnalStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>> <<widget "ghMultipleSequence">> <<if $ghMultipleStep is undefined>><<set $ghMultipleStep = 1>><</if>> <div id="gh-multiple-sequence"> <<if $ghMultipleStep == 1>> <p class="text-center">You're taking on multiple dicks</p> <<bodyMedia 'actions.work.gloryhole.multiple'>> <div class="link-container"> <<link "Keep Going">> <<set $ghMultipleStep = 2>> <<replace "#gh-multiple-sequence">><<ghMultipleSequence>><</replace>> <</link>> </div> <</if>> <<if $ghMultipleStep == 2>> <p class="text-center">You're still taking on multiple dicks</p> <<bodyMedia 'actions.work.gloryhole.multiple'>> <div class="link-container"> <<link "Get Creampied Several times">> <<set $ghMultipleStep = 'inside'>> <<replace "#gh-multiple-sequence">><<ghMultipleSequence>><</replace>> <</link>> <<link "Get Cummed Outside Several times">> <<set $ghMultipleStep = 'outside'>> <<replace "#gh-multiple-sequence">><<ghMultipleSequence>><</replace>> <</link>> </div> <</if>> <<if $ghMultipleStep == 'inside'>> <p class="text-center">You got cummed inside.</p> <<bodyMedia 'actions.work.gloryhole.finish.inside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghMultipleStep)>> <<set $ghAction = ''>> <<set $ghMultipleStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghMultipleStep == 'outside'>> <p class="text-center">You got cummed outside.</p> <<bodyMedia 'actions.work.gloryhole.finish.outside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghMultipleStep)>> <<set $ghAction = ''>> <<set $ghMultipleStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>> <<widget "ghInviteSequence">> <<if $ghInviteStep is undefined>><<set $ghInviteStep = 1>><</if>> <div id="gh-invite-sequence"> <<if $ghInviteStep == 1>> <p class="text-center">You invited someone inside your booth</p> <<bodyMedia 'actions.work.gloryhole.invite'>> <div class="link-container"> <<link "Keep Going">> <<set $ghInviteStep = 2>> <<replace "#gh-invite-sequence">><<ghInviteSequence>><</replace>> <</link>> </div> <</if>> <<if $ghInviteStep == 2>> <p class="text-center">You invited someone inside your booth</p> <<bodyMedia 'actions.work.gloryhole.invite'>> <div class="link-container"> <<link "Swallow">> <<set $ghInviteStep = 'swallow'>> <<replace "#gh-invite-sequence">><<ghInviteSequence>><</replace>> <</link>> <<link "Facial">> <<set $ghInviteStep = 'facial'>> <<replace "#gh-invite-sequence">><<ghInviteSequence>><</replace>> <</link>> <<link "Get Creampied">> <<set $ghInviteStep = 'inside'>> <<replace "#gh-invite-sequence">><<ghInviteSequence>><</replace>> <</link>> <<link "Get Cummed Outside">> <<set $ghInviteStep = 'outside'>> <<replace "#gh-invite-sequence">><<ghInviteSequence>><</replace>> <</link>> </div> <</if>> <<if $ghInviteStep == 'swallow'>> <p class="text-center">You swallowed.</p> <<bodyMedia 'actions.work.gloryhole.finish.swallow'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghInviteStep)>> <<set $ghAction = ''>> <<set $ghInviteStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghInviteStep == 'facial'>> <p class="text-center">You got cummed in your face.</p> <<bodyMedia 'actions.work.gloryhole.finish.facial'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghInviteStep)>> <<set $ghAction = ''>> <<set $ghInviteStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghInviteStep == 'inside'>> <p class="text-center">You got cummed inside.</p> <<bodyMedia 'actions.work.gloryhole.finish.inside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghInviteStep)>> <<set $ghAction = ''>> <<set $ghInviteStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> <<if $ghInviteStep == 'outside'>> <p class="text-center">You got cummed outside.</p> <<bodyMedia 'actions.work.gloryhole.finish.outside'>> <div class="link-container"> <<link "Go Back">> <<run ghWork($ghAction, $ghInviteStep)>> <<set $ghAction = ''>> <<set $ghInviteStep = 1>> <<goto "GloryHole">> <</link>> </div> <</if>> </div> <</widget>>
<<if $gameInit>> <<charChange>> <<run calculateLooks()>> <<run calculateBodyType()>> <<if $forceDayOver && !tags().includes("no-return")>> <<goto "Bedroom">> <</if>> <</if>> <<if $gameInit>> <div class="default-container gap-0.5"> <div> <p class="text-center text-xs"> <<print $worldDate.toLocaleDateString()>> - <<print $worldDate.toLocaleDateString('en-US', { weekday: 'long' })>> </p> <p class="text-center text-xs"> <<print $worldDate.toLocaleTimeString()>> </p> </div> <p><strong><<=getEmoji('money')>> Money</strong>: $ $player.money</p> <p><strong><<=getEmoji('energy')>> Energy</strong>: $player.energy / $player.max_energy</p> <p><strong><<=getEmoji('hunger')>> Hunger</strong>: $player.hunger / 100</p> <p><strong><<=getEmoji('hygiene')>> Hygiene</strong>: $player.hygiene / 100</p> <p><strong><<=getEmoji('looks')>> Looks</strong>: $player.stats.looks / 100</p> </div> <div class="default-container gap-1 mt-3 mt-2"> <p class="text-center text-xs font-bold"> $player.name </p> <img @src="$player.portrait" class="w-30 h-30 rounded-lg object-cover hover:scale-200 transition-all duration-200"> </div> <div class="default-container gap-1 mt-3 mt-2"> <p class="text-center text-xs font-bold"> Clothing </p> <div class="grid grid-cols-2 gap-1"> <<if $player.outfit.outfit>> <<set $player.status.naked = false>> <img @src="$clothingItems[$player.outfit.outfit].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if $player.outfit.underwear>> <<set $player.status.naked = false>> <<set $player.status.underwear = true>> <img @src="$clothingItems[$player.outfit.underwear].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if !$player.outfit.outfit && !$player.outfit.underwear>> <<set $player.status.naked = true>> <<set $player.status.underwear = false>> <<set _breastsTypes = handleBodyData('top')>> <<set _bottomTypes = handleBodyData('bottom')>> <img @src="_breastsTypes.img" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <img @src="_bottomTypes.img" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if $player.outfit.shoes>> <img @src="$clothingItems[$player.outfit.shoes].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if $player.outfit.legwear>> <img @src="$clothingItems[$player.outfit.legwear].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if $player.outfit.earring>> <img @src="$clothingItems[$player.outfit.earring].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> <<if $player.outfit.neckwear>> <img @src="$clothingItems[$player.outfit.neckwear].asset" class="rounded-lg object-cover hover:scale-200 transition-all duration-200"> <</if>> </div> </div> <</if>> <div id="right-sidebar"> <<include "RightNavigation">> </div>
<<if !$notes>> <p class="mb-3">General Info</p> <<infoPanel>> <p class="text-lg font-bold">Character Status</p> <p class="text-sm">Status</p> <p><<=getEmoji('cor')>> Corruption: $player.corruption</p> <p><<=getEmoji('expo')>> Exposition: $player.exposition</p> <hr> <p class="text-sm">Stats</p> <p><<=getEmoji('int')>> Intelligence: $player.stats.intelligence</p> <p><<=getEmoji('fit')>> Fitness: $player.stats.fitness</p> <p><<=getEmoji('cha')>> Charisma: $player.stats.charisma</p> <hr> <p class="text-sm">Skills</p> <p><<=getEmoji('gaming')>> Gaming: $player.skills.gaming</p> <p><<=getEmoji('programming')>> Programming: $player.skills.programming</p> <p><<=getEmoji('cooking')>> Cooking: $player.skills.cooking</p> <p><<=getEmoji('makeup')>> Makeup: $player.skills.makeup</p> <p><<=getEmoji('dancing')>> Dancing: $player.skills.dancing</p> <</infoPanel>> <div class="grid grid-cols-1 gap-4"> <<infoPanel>> <p class="text-lg font-bold">Finances</p> <p class="text-sm">All of these bills are due every Monday</p> <<if $weeklyChecks.rent.status>> <p>Rent: $ $weeklyChecks.rent.value</p> <</if>> <<if $weeklyChecks.uni.status>> <p>Uni Tuition: $ $weeklyChecks.uni.value</p> <</if>> <hr> <p class="text-sm">Income</p> <p>Passive Income: $ <<=calculatePassiveIncome().toFixed(2)>></p> <</infoPanel>> </div> <</if>> <<if $notes == 'job'>> <p class="mb-3">Jobs Info</p> <<if !hasJob() >> <p>Go get a job you slut!</p> <</if>> <div class="grid grid-cols-3"> <<if $jobData.restaurant>> <<infoPanel>> <p class="font-bold">Waitress Job</p> <div class="text-sm"> <p><strong>Times worked:</strong> $restaurantData.timesWorked</p> <p><strong>Rank:</strong> $restaurantData.rank</p> <p><strong>Fame:</strong> <<= $restaurantData.fameDetails[$restaurantData.fame].name >></p> <p><strong>Work Hours: </strong><<=formatRecurringTime('restaurant') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.chef>> <<infoPanel>> <p class="font-bold">Cook/Chef Job</p> <div class="text-sm"> <p><strong>Times worked:</strong> $chefData.timesWorked</p> <p><strong>Rank:</strong> $chefData.rank</p> <p><strong>Place of Work:</strong> $chefData.currentWorkPlace</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('chef') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.modelling>> <<infoPanel>> <p class="font-bold">Modelling Job</p> <div class="text-sm"> <p><strong>Times worked:</strong> $modelData.timesWorked</p> <p><strong>Rank:</strong> $modelData.rank</p> <p><strong>Path:</strong> $modelData.path</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('modelling') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.glory>> <<infoPanel>> <p class="font-bold">GloryHole Worker</p> <div class="text-sm"> <p><strong>Times worked:</strong> $gloryHoleData.timesWorked</p> <p><strong>Rank:</strong> $gloryHoleData.rank</p> </div> <</infoPanel>> <</if>> <<if $jobData.dev>> <<infoPanel>> <p class="font-bold">Developer</p> <div class="text-sm"> <p><strong>Projects Completed:</strong> $devData.projectsCompleted</p> <p><strong>Rank:</strong> $devData.rank</p> <p><strong>Passive Income:</strong> $devData.passiveIncome</p> </div> <</infoPanel>> <</if>> <<if $jobData.pornstar>> <<infoPanel>> <p class="font-bold">Pornstar</p> <div class="text-sm"> <p><strong>Movies Made:</strong> $pornStarData.timesWorked</p> <p><strong>Rank:</strong> $pornStarData.rank</p> <p><strong>Passive Income:</strong> $pornStarData.passiveIncome</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('pornStudio') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.stripper>> <<infoPanel>> <p class="font-bold">Stripper</p> <div class="text-sm"> <p><strong>Times Worked:</strong> $stripperData.timesWorked</p> <p><strong>Rank:</strong> $stripperData.rank</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('stripper') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.streamer>> <<infoPanel>> <p class="font-bold">Streamer</p> <div class="text-sm"> <p><strong>Times Streamed:</strong> $streamerData.timesStreamed</p> <p><strong>Rank:</strong> $streamerData.rank</p> <p><strong>Followers:</strong> $streamerData.followers</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('streaming') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.office>> <<infoPanel>> <p class="font-bold">Office Worker</p> <div class="text-sm"> <p><strong>Times Worked:</strong> $officeData.timesWorked</p> <p><strong>Rank:</strong> $officeData.rank</p> <p><strong>Fame:</strong> $officeData.fame</p> <p><strong>Work Hours: </strong><<=formatRecurringTime('office') >></p> </div> <</infoPanel>> <</if>> <<if $jobData.prostitute>> <<infoPanel>> <p class="font-bold">Prostitute</p> <div class="text-sm"> <p><strong>Times Worked:</strong> $prostituteData.timesWorked</p> <p><strong>Rank:</strong> $prostituteData.rank</p> <p><strong>Work Hours: </strong> Show up in prostitute dress on the Shady District</p> </div> <</infoPanel>> <</if>> </div> <</if>> <<if $notes == 'stats'>> <p class="mb-3">General Stats</p> <div class="grid grid-cols-2 gap-4"> <<infoPanel>> <p class="font-bold">Sex Counters</p> <div class="text-sm"> <p><strong>Times Masturbated:</strong> $sexCounters.masturbate</p> <p><strong>Handjobs Given:</strong> $sexCounters.handjob</p> <p><strong>Times had Sex:</strong> $sexCounters.sex</p> <p><strong>Times had Oral Sex:</strong> $sexCounters.oral</p> <p><strong>Times had Anal Sex:</strong> $sexCounters.anal</p> <p><strong>Times had Straight Sex:</strong> $sexCounters.straight</p> <p><strong>Times had Lesbian Sex:</strong> $sexCounters.lesbian</p> <p><strong>Times had Group Sex:</strong> $sexCounters.group</p> <p><strong>Times Creampied:</strong> $sexCounters.creampie</p> <p><strong>Times Facial:</strong> $sexCounters.facial</p> <p><strong>Times Swallowed:</strong> $sexCounters.swallow</p> <p><strong>Times Bodyshot:</strong> $sexCounters.bodyshot</p> </div> <</infoPanel>> <<infoPanel>> <p class="font-bold">General Counters</p> <div class="text-sm"> <p><strong>Gym Cardio:</strong> $generalCounters.gym.cardio</p> <p><strong>Gym Full Body:</strong> $generalCounters.gym.full_body</p> <p><strong>Gym Dance:</strong> $generalCounters.gym.dance_lessons</p> <p><strong>Times Studied:</strong> $generalCounters.studied</p> </div> <</infoPanel>> </div> <</if>> <<if $notes == 'perks'>> <p class="mb-3">Perks & Achievements</p> <div class="grid grid-cols-2 gap-4"> <<infoPanel>> <p class="font-bold">Perks</p> <div class="text-sm"> <<for _itemKey, _itemObj range $perks>> <<set _textColor = _itemObj ? 'text-white' : 'text-gray-500'>> <p @class="_textColor"><strong><<=$perksDetails[_itemKey].name>>:</strong> <<= _itemObj ? 'Unlocked' : 'Locked' >></p> <</for>> </div> <</infoPanel>> <<infoPanel>> <p class="font-bold">Achievements</p> <div class="text-sm"> <p>Coming Soon</p> </div> <</infoPanel>> </div> <</if>> <div class="link-container"> [[General Notes|Notes][$notes = '']] [[Stats|Notes][$notes = 'stats']] [[Job Notes|Notes][$notes = 'job']] [[Perks & Achievements|Notes][$notes = 'perks']] <<link "Go Back">> <<goto $returnTo>> <</link>> </div>
<div id="ui-rightbar" class="font-xs"> <<if $gameInit>> <<if !tags(passage()).includes('no-return')>> <<set $returnTo = passage()>> <</if>> <div class="info-container overflow-y-auto max-h-72 text-sm"> <p class="text-center font-medium"> Things you can do today! </p> <<=getDailyTasks().join('<br/>') >> </div> <div class="link-container"> <<link "Notes">> <<goto "Notes">> <</link>> <<if $player.inventory.phone && !checkTooLate()>> <<link "Phone">> <<goto "Phone">> <</link>> <<else>> <<linkDisabled>> No phone yet <</linkDisabled>> <</if>> <<link "Tips & Hints">> <<goto "TipsHints">> <</link>> <<link "Cheat Menu">> <<goto "CheatMenu">> <</link>> </div> <div class="default-container mt-8 gap-0.5 text-sm"> <p class="font-bold text-center">Status</p> <<set _params = {'zoom': true, 'class': 'max-h-64'}>> <<if $player.status.cum.face>> <p class="text-xs">You're walking with cum on your face</p> <<media $player.status.cum.face _params>> <</if>> <<if $player.status.cum.body>> <p class="text-xs">You're walking with cum on your body</p> <<media $player.status.cum.body _params>> <</if>> <<if $player.status.cum.inside>> <p class="text-xs">You have cum dripping out inside of you</p> <<media $player.status.cum.inside _params>> <</if>> <<if $player.buttplug>> <p class="text-xs">You're walking around with a buttplug</p> <<media $player.buttplug _params>> <</if>> </div> <br /> <<link "Wait 10 minutes here">> <<run skipTime(0, 10)>> <<run goToPassage()>> <</link>> <!--Debug for advancing time more easily, if you found this feel free to use it <div class="mt-4 flex flex-col gap-1"> <input id="goto-time-input" type="number" min="0" placeholder="Enter time (minutes)" class="p-1 rounded text-black w-full" /> <button class="px-2 py-1 rounded bg-indigo-700 text-white" onclick="goToTime(document.getElementById('goto-time-input').value, 0, false); goToPassage()"> Go To Time & Refresh </button> </div> --> <</if>> </div>
<<set $gameItems = { 'food' : { 'name': 'Food', 'cost': 10, 'amountType': 'many' }, 'makeup' : { 'name': 'Make-Up', 'cost': 50, 'amountType': 'many' }, 'phone' : { 'name': 'Phone', 'cost': 150, 'amountType': 'single' }, 'computer' : { 'name': 'Computer', 'cost': 500, 'amountType': 'single' }, 'webcam' : { 'name': 'Webcam', 'cost': 300, 'amountType': 'single' } }>> <<set $sexShopItems = { 'small_dildo': { 'name': 'Small Dildo', 'cost': 500, 'amountType': 'single', 'reqs': {'corruption': 20}, 'asset': 'src/items/sex_shop/small_dildo.jpg' }, 'medium_dildo': { 'name': 'Medium Dildo', 'cost': 1000, 'amountType': 'single', 'reqs': {'corruption': 40}, 'asset': 'src/items/sex_shop/medium_dildo.jpg' }, 'large_dildo': { 'name': 'Large Dildo', 'cost': 2000, 'amountType': 'single', 'reqs': {'corruption': 60}, 'asset': 'src/items/sex_shop/large_dildo.jpg' }, 'bad_dragon_dildo': { 'name': 'Bad Dragon Dildo', 'cost': 5000, 'amountType': 'single', 'reqs': {'corruption': 80}, 'asset': 'src/items/sex_shop/horse_dildo.jpg' } }>> <<set $hairStyles = { 'blonde_long': { 'name': 'Blonde Long Straight', 'cost': 2000, 'asset': 'src/mc/body/hair/blonde_long.jpg' }, 'blonde_bob': { 'name': 'Blonde Bob Cut', 'cost': 2000, 'asset': 'src/mc/body/hair/blonde_bob.jpg' }, 'blonde_twin': { 'name': 'Blonde Twin Pigtails', 'cost': 2000, 'asset': 'src/mc/body/hair/blonde_twin.jpg' }, 'red_long': { 'name': 'Red Long Straight', 'cost': 2000, 'asset': 'src/mc/body/hair/red_long.jpg' }, 'red_bob': { 'name': 'Red Bob Cut', 'cost': 2000, 'asset': 'src/mc/body/hair/red_bob.jpg' }, 'red_twin': { 'name': 'Red Twin Pigtails', 'cost': 2000, 'asset': 'src/mc/body/hair/red_twin.jpg' }, 'black_long': { 'name': 'Black Long Straight', 'cost': 2000, 'asset': 'src/mc/body/hair/black_long.jpg' }, 'black_bob': { 'name': 'Black Bob Cut', 'cost': 2000, 'asset': 'src/mc/body/hair/black_bob.jpg' }, 'black_twin': { 'name': 'Black Twin Pigtails', 'cost': 2000, 'asset': 'src/mc/body/hair/black_twin.jpg' }, 'pink_long': { 'name': 'Pink Long Straight', 'cost': 2000, 'asset': 'src/mc/body/hair/pink_long.jpg' }, 'pink_bob': { 'name': 'Pink Chanel Cut', 'cost': 2000, 'asset': 'src/mc/body/hair/pink_bob.jpg' }, 'pink_twin': { 'name': 'Pink Twin Pigtails', 'cost': 2000, 'asset': 'src/mc/body/hair/pink_twin.jpg' } }>> <<script>> /* <script> */ window.canBuyItem = function(item, itemsObject = null, quantity = 1) { const player = State.getVar('$player'); const items = itemsObject || State.getVar('$gameItems'); return player.money >= items[item].cost * quantity; }; window.wantBuyItem = function(item, itemType = 'clothing', param = null) { const player = State.getVar('$player'); let itemReqs = {}; if (itemType == 'clothing') { const clothingItems = State.getVar('$clothingItems'); itemReqs = clothingItems[item].reqs || {}; } if (itemType == 'tattoo') { const tattooItems = State.getVar('$tattooItems'); itemReqs = tattooItems[param][item].reqs || {}; } for (const req in itemReqs) { if (player[req] === undefined || player[req] < itemReqs[req]) { return false; } } return true; }; window.hasItem = function(item, place) { let inventory = State.getVar('$player').inventory; switch(place){ case 'clothing': inventory = inventory.clothing; for (const slot in inventory) { if (Array.isArray(inventory[slot]) && inventory[slot].includes(item)) { return true; } } break; case 'single': return inventory[item] === true; } return false; }; window.buyItem = function(item, itemsObject = null, $itemQuantity = 1) { let player = State.getVar('$player'); const items = itemsObject || State.getVar('$gameItems'); if (items[item].amountType === 'single') { player.inventory[item] = true; } if (items[item].amountType === 'many') { player.inventory[item] += $itemQuantity; } useMoney(items[item].cost * $itemQuantity); }; window.buyClothingItem = function(item) { let player = State.getVar('$player'); const clothingItems = State.getVar('$clothingItems'); player.inventory.clothing[clothingItems[item].slot].push(item); useMoney(clothingItems[item].cost); }; <</script>>
<<set $clothingItems = {"default_outfit": {"name": "Default", "slot": "outfit", "filter": "default", "cost": 0, "asset": "src/items/clothing/outfits/default_outfit.jpg", "reqs": {"corruption": 0}}, "default_legwear": {"name": "Default Legwear", "slot": "legwear", "filter": "default", "cost": 0, "asset": "src/items/clothing/legwear/default_legwear.jpg", "reqs": {"corruption": 0}}, "default_shoes": {"name": "Default Shoes", "slot": "shoes", "filter": "default", "cost": 0, "asset": "src/items/clothing/shoes/default_shoes.jpg", "reqs": {"corruption": 0}}, "default_underwear": {"name": "Default Underwear", "slot": "underwear", "filter": "default", "cost": 0, "asset": "src/items/clothing/underwear/default_underwear.jpg", "reqs": {"corruption": 0}}, "fancy_earring_1": {"name": "Fancy Earring 1", "slot": "earring", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/earring/fancy_earring_1.jpg", "reqs": {"corruption": 0}}, "fancy_earring_2": {"name": "Fancy Earring 2", "slot": "earring", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/earring/fancy_earring_2.jpg", "reqs": {"corruption": 0}}, "fancy_earring_3": {"name": "Fancy Earring 3", "slot": "earring", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/earring/fancy_earring_3.jpg", "reqs": {"corruption": 0}}, "fancy_earring_4": {"name": "Fancy Earring 4", "slot": "earring", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/earring/fancy_earring_4.jpg", "reqs": {"corruption": 0}}, "fancy_neckwear_1": {"name": "Fancy Neckwear 1", "slot": "neckwear", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/neckwear/fancy_neckwear_1.jpg", "reqs": {"corruption": 0}}, "fancy_neckwear_2": {"name": "Fancy Neckwear 2", "slot": "neckwear", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/neckwear/fancy_neckwear_2.jpg", "reqs": {"corruption": 0}}, "fancy_neckwear_3": {"name": "Fancy Neckwear 3", "slot": "neckwear", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/neckwear/fancy_neckwear_3.jpg", "reqs": {"corruption": 0}}, "fancy_neckwear_4": {"name": "Fancy Neckwear 4", "slot": "neckwear", "filter": "clothing_shop", "cost": 5000, "asset": "src/items/clothing/neckwear/fancy_neckwear_4.jpg", "reqs": {"corruption": 0}}, "high_heels_shoes_1": {"name": "High Heels Shoes 1", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/high_heels_shoes_1.jpg", "reqs": {"corruption": 0}}, "high_heels_shoes_2": {"name": "High Heels Shoes 2", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/high_heels_shoes_2.jpg", "reqs": {"corruption": 0}}, "high_heels_shoes_3": {"name": "High Heels Shoes 3", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/high_heels_shoes_3.jpg", "reqs": {"corruption": 0}}, "high_heels_shoes_4": {"name": "High Heels Shoes 4", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/high_heels_shoes_4.jpg", "reqs": {"corruption": 0}}, "large_buttplug_buttwear": {"name": "Large Buttplug Buttwear", "slot": "buttwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/buttwear/large_buttplug_buttwear.jpg", "reqs": {"corruption": 0}}, "medium_buttplug_buttwear": {"name": "Medium Buttplug Buttwear", "slot": "buttwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/buttwear/medium_buttplug_buttwear.jpg", "reqs": {"corruption": 0}}, "simple_earring_1": {"name": "Simple Earring 1", "slot": "earring", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/earring/simple_earring_1.jpg", "reqs": {"corruption": 0}}, "simple_earring_2": {"name": "Simple Earring 2", "slot": "earring", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/earring/simple_earring_2.jpg", "reqs": {"corruption": 0}}, "simple_earring_3": {"name": "Simple Earring 3", "slot": "earring", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/earring/simple_earring_3.jpg", "reqs": {"corruption": 0}}, "simple_earring_4": {"name": "Simple Earring 4", "slot": "earring", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/earring/simple_earring_4.jpg", "reqs": {"corruption": 0}}, "simple_neckwear_1": {"name": "Simple Neckwear 1", "slot": "neckwear", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/simple_neckwear_1.jpg", "reqs": {"corruption": 0}}, "simple_neckwear_2": {"name": "Simple Neckwear 2", "slot": "neckwear", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/simple_neckwear_2.jpg", "reqs": {"corruption": 0}}, "simple_neckwear_3": {"name": "Simple Neckwear 3", "slot": "neckwear", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/simple_neckwear_3.jpg", "reqs": {"corruption": 0}}, "simple_neckwear_4": {"name": "Simple Neckwear 4", "slot": "neckwear", "filter": "clothing_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/simple_neckwear_4.jpg", "reqs": {"corruption": 0}}, "small_buttplug_buttwear": {"name": "Small Buttplug Buttwear", "slot": "buttwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/buttwear/small_buttplug_buttwear.jpg", "reqs": {"corruption": 0}}, "casual_normal_outfit_1": {"name": "Casual Normal 1", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/casual_normal_outfit_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "denim_normal_1": {"name": "Denim Normal 1", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/denim_normal_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "gym_normal_outfit_1": {"name": "Gym Normal 1", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/gym_normal_outfit_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "gym_normal_outfit_2": {"name": "Gym Normal 2", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/gym_normal_outfit_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "gym_normal_outfit_3": {"name": "Gym Normal 3", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/gym_normal_outfit_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_casual_shoes_1": {"name": "Normal Casual Shoes 1", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_casual_shoes_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_casual_shoes_2": {"name": "Normal Casual Shoes 2", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_casual_shoes_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_comfy_underwear_1": {"name": "Normal Comfy Underwear 1", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_comfy_underwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_comfy_underwear_2": {"name": "Normal Comfy Underwear 2", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_comfy_underwear_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_comfy_underwear_3": {"name": "Normal Comfy Underwear 3", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_comfy_underwear_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_crew_legwear_1": {"name": "Normal Crew Legwear 1", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_crew_legwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_gym_shoes_1": {"name": "Normal Gym Shoes 1", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_gym_shoes_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_gym_shoes_2": {"name": "Normal Gym Shoes 2", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_gym_shoes_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lacy_underwear_1": {"name": "Normal Lacy Underwear 1", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lacy_underwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lacy_underwear_2": {"name": "Normal Lacy Underwear 2", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lacy_underwear_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lacy_underwear_3": {"name": "Normal Lacy Underwear 3", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lacy_underwear_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lingerie_underwear_1": {"name": "Normal Lingerie Underwear 1", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lingerie_underwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lingerie_underwear_2": {"name": "Normal Lingerie Underwear 2", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lingerie_underwear_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_lingerie_underwear_3": {"name": "Normal Lingerie Underwear 3", "slot": "underwear", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/underwear/normal_lingerie_underwear_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_pantyhose_legwear_1": {"name": "Normal Pantyhose Legwear 1", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_pantyhose_legwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_pantyhose_legwear_2": {"name": "Normal Pantyhose Legwear 2", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_pantyhose_legwear_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_pantyhose_legwear_3": {"name": "Normal Pantyhose Legwear 3", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_pantyhose_legwear_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_pantyhose_legwear_4": {"name": "Normal Pantyhose Legwear 4", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_pantyhose_legwear_4.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_thigh_high_legwear_1": {"name": "Normal Thigh High Legwear 1", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_thigh_high_legwear_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_thigh_high_legwear_2": {"name": "Normal Thigh High Legwear 2", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_thigh_high_legwear_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_thigh_high_legwear_3": {"name": "Normal Thigh High Legwear 3", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_thigh_high_legwear_3.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_thigh_high_legwear_4": {"name": "Normal Thigh High Legwear 4", "slot": "legwear", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/legwear/normal_thigh_high_legwear_4.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_work_shoes_1": {"name": "Normal Work Shoes 1", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_work_shoes_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "normal_work_shoes_2": {"name": "Normal Work Shoes 2", "slot": "shoes", "filter": "clothing_shop", "cost": 150, "asset": "src/items/clothing/shoes/normal_work_shoes_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "sundress_normal_outfit_1": {"name": "Sundress Normal 1", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/sundress_normal_outfit_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "work_normal_outfit_1": {"name": "Work Normal 1", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/work_normal_outfit_1.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "work_normal_outfit_2": {"name": "Work Normal 2", "slot": "outfit", "filter": "clothing_shop", "cost": 100, "asset": "src/items/clothing/outfits/work_normal_outfit_2.jpg", "reqs": {"corruption": 5, "exposition": 5}}, "casual_revealing_outfit_1": {"name": "Casual Revealing 1", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/casual_revealing_outfit_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "denim_revealing_1": {"name": "Denim Revealing 1", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/denim_revealing_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "gym_revealing_outfit_1": {"name": "Gym Revealing 1", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/gym_revealing_outfit_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "gym_revealing_outfit_2": {"name": "Gym Revealing 2", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/gym_revealing_outfit_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "sundress_revealing_outfit_1": {"name": "Sundress Revealing 1", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/sundress_revealing_outfit_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "work_revealing_outfit_1": {"name": "Work Revealing 1", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/work_revealing_outfit_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "work_revealing_outfit_2": {"name": "Work Revealing 2", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/work_revealing_outfit_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "work_revealing_outfit_3": {"name": "Work Revealing 3", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/work_revealing_outfit_3.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "work_revealing_outfit_4": {"name": "Work Revealing 4", "slot": "outfit", "filter": "clothing_shop", "cost": 200, "asset": "src/items/clothing/outfits/work_revealing_outfit_4.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "casual_slutty_outfit_1": {"name": "Casual Slutty 1", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/casual_slutty_outfit_1.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "casual_slutty_outfit_2": {"name": "Casual Slutty 2", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/casual_slutty_outfit_2.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "casual_slutty_outfit_4": {"name": "Casual Slutty 4", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/casual_slutty_outfit_4.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "denim_slutty_1": {"name": "Denim Slutty 1", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/denim_slutty_1.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "gym_slutty_outfit_1": {"name": "Gym Slutty 1", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/gym_slutty_outfit_1.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "gym_slutty_outfit_2": {"name": "Gym Slutty 2", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/gym_slutty_outfit_2.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "gym_slutty_outfit_3": {"name": "Gym Slutty 3", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/gym_slutty_outfit_3.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "sundress_slutty_outfit_1": {"name": "Sundress Slutty 1", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/sundress_slutty_outfit_1.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "work_slutty_outfit_2": {"name": "Work Slutty 2", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/work_slutty_outfit_2.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "work_slutty_outfit_3": {"name": "Work Slutty 3", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/work_slutty_outfit_3.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "work_slutty_outfit_4": {"name": "Work Slutty 4", "slot": "outfit", "filter": "clothing_shop", "cost": 250, "asset": "src/items/clothing/outfits/work_slutty_outfit_4.jpg", "reqs": {"corruption": 15, "exposition": 15}}, "casual_barely_outfit_1": {"name": "Casual Barely 1", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/casual_barely_outfit_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "casual_barely_outfit_2": {"name": "Casual Barely 2", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/casual_barely_outfit_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "casual_barely_outfit_4": {"name": "Casual Barely 4", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/casual_barely_outfit_4.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "casual_barely_outfit_5": {"name": "Casual Barely 5", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/casual_barely_outfit_5.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "denim_barely_naked_1": {"name": "Denim Barely Naked 1", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/denim_barely_naked_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "denim_barely_naked_2": {"name": "Denim Barely Naked 2", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/denim_barely_naked_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_1": {"name": "Gym Barely 1", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_2": {"name": "Gym Barely 2", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_3": {"name": "Gym Barely 3", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_3.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_4": {"name": "Gym Barely 4", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_4.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_5": {"name": "Gym Barely 5", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_5.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "gym_barely_outfit_6": {"name": "Gym Barely 6", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/gym_barely_outfit_6.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "sundress_barely_naked_outfit_1": {"name": "Sundress Barely Naked 1", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/sundress_barely_naked_outfit_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "work_barely_outfit_1": {"name": "Work Barely 1", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/work_barely_outfit_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "work_barely_outfit_3": {"name": "Work Barely 3", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/work_barely_outfit_3.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "work_barely_naked_outfit_2": {"name": "Work Barely Naked 2", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/work_barely_naked_outfit_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "work_barely_naked_outfit_4": {"name": "Work Barely Naked 4", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/work_barely_naked_outfit_4.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "work_barely_naked_outfit_5": {"name": "Work Barely Naked 5", "slot": "outfit", "filter": "clothing_shop", "cost": 500, "asset": "src/items/clothing/outfits/work_barely_naked_outfit_5.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "alternative_goth_outfit_1": {"name": "Alternative Goth 1", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/alternative_goth_outfit_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "alternative_goth_outfit_2": {"name": "Alternative Goth 2", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/alternative_goth_outfit_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "alternative_goth_outfit_3": {"name": "Alternative Goth 3", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/alternative_goth_outfit_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "alternative_goth_outfit_4": {"name": "Alternative Goth 4", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/alternative_goth_outfit_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_1": {"name": "Exhibitionist Dress 1", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_2": {"name": "Exhibitionist Dress 2", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_3": {"name": "Exhibitionist Dress 3", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_4": {"name": "Exhibitionist Dress 4", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_5": {"name": "Exhibitionist Dress 5", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "exhibitionist_dress_outfit_6": {"name": "Exhibitionist Dress 6", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/exhibitionist_dress_outfit_6.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fetish_leather_outfit_1": {"name": "Fetish Leather 1", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/fetish_leather_outfit_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fetish_leather_outfit_2": {"name": "Fetish Leather 2", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/fetish_leather_outfit_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fetish_leather_outfit_3": {"name": "Fetish Leather 3", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/fetish_leather_outfit_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fetish_leather_outfit_4": {"name": "Fetish Leather 4", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/fetish_leather_outfit_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fetish_leather_outfit_5": {"name": "Fetish Leather 5", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/fetish_leather_outfit_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_1": {"name": "Fishnets Legwear 1", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_2": {"name": "Fishnets Legwear 2", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_3": {"name": "Fishnets Legwear 3", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_4": {"name": "Fishnets Legwear 4", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_5": {"name": "Fishnets Legwear 5", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "fishnets_legwear_6": {"name": "Fishnets Legwear 6", "slot": "legwear", "filter": "sex_shop", "cost": 500, "asset": "src/items/clothing/legwear/fishnets_legwear_6.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "latex_thigh_high_shoes_1": {"name": "Latex Thigh High Shoes 1", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/latex_thigh_high_shoes_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "latex_thigh_high_shoes_2": {"name": "Latex Thigh High Shoes 2", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/latex_thigh_high_shoes_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "latex_thigh_high_shoes_3": {"name": "Latex Thigh High Shoes 3", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/latex_thigh_high_shoes_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_1": {"name": "Open Lacy Underwear 1", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_2": {"name": "Open Lacy Underwear 2", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_3": {"name": "Open Lacy Underwear 3", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_4": {"name": "Open Lacy Underwear 4", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_5": {"name": "Open Lacy Underwear 5", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "open_lacy_underwear_6": {"name": "Open Lacy Underwear 6", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/open_lacy_underwear_6.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "prostitute_dress_outfit_1": {"name": "Prostitute Dress 1", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/prostitute_dress_outfit_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "prostitute_dress_outfit_2": {"name": "Prostitute Dress 2", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/prostitute_dress_outfit_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "prostitute_dress_outfit_3": {"name": "Prostitute Dress 3", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/prostitute_dress_outfit_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "prostitute_dress_outfit_4": {"name": "Prostitute Dress 4", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/prostitute_dress_outfit_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "prostitute_dress_outfit_5": {"name": "Prostitute Dress 5", "slot": "outfit", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/outfits/prostitute_dress_outfit_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_1": {"name": "Skimpy Underwear 1", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_2": {"name": "Skimpy Underwear 2", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_3": {"name": "Skimpy Underwear 3", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_4": {"name": "Skimpy Underwear 4", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_5": {"name": "Skimpy Underwear 5", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_6": {"name": "Skimpy Underwear 6", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_6.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_7": {"name": "Skimpy Underwear 7", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_7.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "skimpy_underwear_8": {"name": "Skimpy Underwear 8", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/skimpy_underwear_8.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_earring_1": {"name": "Smut Text Earring 1", "slot": "earring", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/earring/smut_text_earring_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_earring_2": {"name": "Smut Text Earring 2", "slot": "earring", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/earring/smut_text_earring_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_earring_3": {"name": "Smut Text Earring 3", "slot": "earring", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/earring/smut_text_earring_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_neckwear_1": {"name": "Smut Text Neckwear 1", "slot": "neckwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/smut_text_neckwear_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_neckwear_2": {"name": "Smut Text Neckwear 2", "slot": "neckwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/smut_text_neckwear_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_neckwear_3": {"name": "Smut Text Neckwear 3", "slot": "neckwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/smut_text_neckwear_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_neckwear_4": {"name": "Smut Text Neckwear 4", "slot": "neckwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/neckwear/smut_text_neckwear_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_1": {"name": "Smut Text Underwear 1", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_2": {"name": "Smut Text Underwear 2", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_3": {"name": "Smut Text Underwear 3", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_4": {"name": "Smut Text Underwear 4", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_5": {"name": "Smut Text Underwear 5", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_5.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "smut_text_underwear_6": {"name": "Smut Text Underwear 6", "slot": "underwear", "filter": "sex_shop", "cost": 1000, "asset": "src/items/clothing/underwear/smut_text_underwear_6.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "stripper_heels_shoes_1": {"name": "Stripper Heels Shoes 1", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/stripper_heels_shoes_1.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "stripper_heels_shoes_2": {"name": "Stripper Heels Shoes 2", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/stripper_heels_shoes_2.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "stripper_heels_shoes_3": {"name": "Stripper Heels Shoes 3", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/stripper_heels_shoes_3.jpg", "reqs": {"corruption": 35, "exposition": 35}}, "stripper_heels_shoes_4": {"name": "Stripper Heels Shoes 4", "slot": "shoes", "filter": "sex_shop", "cost": 150, "asset": "src/items/clothing/shoes/stripper_heels_shoes_4.jpg", "reqs": {"corruption": 35, "exposition": 35}}} >>
<<widget "flash">> <<if $flashMessage && $flashSuccess>> <<successMessage>> <p><<= $flashMessage>></p> <</successMessage>> <</if>> <<if $flashMessage && !$flashSuccess>> <<failMessage>> <p><<= $flashMessage>></p> <</failMessage>> <</if>> <<unset $flashMessage>> <<unset $flashSuccess>> <</widget>> <<widget "linkDisabled" container>> <<if _args[0]>> <span class="link-disabled">_contents (<<=printRequirements(_args[0])>>)</span> <<else>> <span class="link-disabled">_contents</span> <</if>> <</widget>> <<widget "charChange">> <<if $toastMessage>> <div class="absolute bottom-8 bg-zinc-100 text-black p-3 rounded-lg" style="width:232px"> $toastMessage </div> <<unset $toastMessage>> <</if>> <</widget>> <<widget "successMessage" container>> <div class="mt-3 p-3 w-fit rounded-lg border border-zinc-50 bg-green-800 mx-auto"> _contents </div> <</widget>> <<widget "failMessage" container>> <div class="mt-3 p-3 w-fit rounded-lg border border-zinc-50 bg-red-800 mx-auto"> _contents </div> <</widget>> <<widget "infoPanel" container>> <<set _classes = 'info-container'>> <<set _classes = _args[0] ? _classes + ' ' + _args[0] : _classes>> <div @class="_classes"> _contents </div> <</widget>> <<widget "media">> <<set _options = _args[1] ? _args[1] : {}>> <<set _zoom = _options.zoom ? "hover:scale-150 transition-all duration-300" : "">> <<set _classes = _options.class ? _options.class : "">> <<set _classes = _classes + " " + _zoom>> <<if isVideo(_args[0]) >> <video autoplay muted loop @class="_classes"> <source @src="_args[0]" type="video/mp4" > </video> <<else>> <img @src="_args[0]" @class="_zoom"> <</if>> <</widget>> <<widget "video">> <div class="my-3 media-wrapper" id="media-box"> <video autoplay muted loop> <<if Array.isArray(_args[0])>> <source @src="_args[0].random()" type="video/mp4"> <<else>> <source @src="_args[0]" type="video/mp4"> <</if>> </video> </div> <</widget>> <<widget "image">> <div class="my-3 media-wrapper" id="media-box"> <<if Array.isArray(_args[0])>> <img @src="_args[0].random()"> <<else>> <img @src="_args[0]"> <</if>> </div> <</widget>> <<widget "bodyMedia">> <<set _chosenMedia = handleFile(_args[0])>> <<set _options = _args[1] ? _args[1] : {}>> <<set _zoom = _options.zoom ? "hover:scale-150 transition-all duration-300" : "">> <div class="my-3 media-wrapper" id="media-box"> <<if isVideo(_chosenMedia) >> <video autoplay muted loop @class="_zoom"> <source @src="_chosenMedia" type="video/mp4"> </video> <<else>> <img @src="_chosenMedia" @class="_zoom"> <</if>> </div> <</widget>> <<widget dialogWindow container>> <<run openDialog(_args[0], _contents)>> <</widget>> <<script>> /* <script> */ window.showToast = function(message, predefined = null) { if(predefined) { let m = ''; switch(predefined) { case 'energy': m = "You have more energy! ⚡"; break; case 'hygiene': m = "You cleaned yourself! 🚿"; break; case 'hunger': m = "You are no longer hungry! 🍗"; break; case 'cor': m = "You feel more corrupted! 😈"; break; case 'fit': m = "You feel stronger! 💪"; break; case 'int': m = "You feel smarter! 🎓"; break; case 'cha': m = "You feel more outgoing! 💬"; break; case 'expo': m = "You feel less inhibited! 👙"; break; case 'gaming': m = "You improved your gaming skills! 🎮"; break; case 'programming': m = "You improved your programming skills! 💻"; break; case 'makeup': m = "You improved your makeup skills! 💄"; break; case 'cooking': m = "You improved your cooking skills! 🍳"; break; } State.setVar('$toastMessage', m); return; } State.setVar('$toastMessage', message); }; window.printRequirements = function(reqs) { let string = ''; Object.keys(reqs).forEach(key => { string += reqs[key] + getEmoji(key) + ' '; }); return string.trim(' '); }; window.openDialog = function (title, contents) { Dialog .create(title) .empty() .wiki(contents) .open(); }; <</script>>
<<set $gameInit = false>> <<set $uniData = { 'enrolled' : false, 'graduated': false, 'classesTaken': 0, 'daysSinceEnroll': 1, 'testsTaken': 0, 'testsPassed': 0, 'testDay': false, 'attentionCount': 0, 'socializeCount': 0, 'flirtCount': 0, 'flashCount': 0 }>> <<set $historyDialogs = { 'looks': { 15: { 'seen' : false, 'media': 'src/history/dialog/looks/15.gif', 'text': 'You have a subtle charm that occasionally catches someone\'s eye, though you haven\'t fully realized your own attractiveness yet.' }, 30: { 'seen' : false, 'media': 'src/history/dialog/looks/30.gif', 'text': 'You begin to notice more compliments and attention, feeling a growing confidence in your feminine appeal.' }, 50: { 'seen' : false, 'media': 'src/history/dialog/looks/50.gif', 'text': 'Your beauty is apparent, and you carry yourself with poise. People are drawn to your presence and you feel comfortable in your own skin.' }, 75: { 'seen' : false, 'media': 'src/history/dialog/looks/75.gif', 'text': 'You turn heads wherever you go, radiating confidence and allure. Your attractiveness is widely recognized and admired.' }, 100: { 'seen' : false, 'media': 'src/history/dialog/looks/100.webp', 'text': 'You are the epitome of feminine beauty, captivating everyone around you. Your allure is undeniable and you inspire admiration wherever you appear.' } }, 'corruption': { 15: { 'seen' : false, 'media': 'src/history/dialog/corruption/15.mp4', 'text': 'You start to explore your sexuality and feel curious about different experiences.\n' + 'You may have had a few partners but mostly keep it private.\n' + 'You\'re still figuring out your boundaries and preferences.', }, 30: { 'seen' : false, 'media': 'src/history/dialog/corruption/30.mp4', 'text': 'Your sexual experiences have grown, and you\'re more comfortable with expressing your desires.\n' + 'You have a more adventurous streak and might experiment with new things.\n' + 'You start to be more open about your sexuality, but still maintain a level of discretion.', }, 50: { 'seen' : false, 'media': 'src/history/dialog/corruption/50.mp4', 'text': 'At this point, you\'ve had numerous sexual partners and have a solid understanding of what you like.\n' + 'You are sexually confident and may enjoy flaunting your sexuality.\n' + 'Some may begin to judge you based on your choices, but you\'re mostly unbothered by it.\n' + 'You continue to explore and enjoy your sexual freedom.', }, 75: { 'seen' : false, 'media': 'src/history/dialog/corruption/75.mp4', 'text': 'You are now seen as sexually promiscuous by many, but for you, it\'s all about living life to the fullest.\n' + 'You engage in various sexual activities without much concern for societal norms.\n' + 'You have a strong sense of who you are and are comfortable with your high slutiness score.\n' + 'You may face criticism, but you know that your happiness is what matters most.', }, 100: { 'seen' : false, 'media': 'src/history/dialog/corruption/100.mp4', 'text': 'You have fully embraced your sexuality and have no regrets about your past experiences.\n' + 'Your slutiness score is at its peak, and you are unapologetic about your choices.\n' + 'You may face more significant challenges due to societal stigma, but your confidence is unshaken.\n' + 'You continue to live your life on your own terms, seeking pleasure and exploration without limits.', } }, 'exposition': { 15: { 'seen': false, 'media': 'src/history/dialog/exposition/15.mp4', 'text': "You feel a slight blush creeping up your cheeks as you accidentally expose a bit more skin than you intended. You quickly cover up, feeling self-conscious about your body." }, 30: { 'seen': false, 'media': 'src/history/dialog/exposition/30.mp4', 'text': "You're starting to become more comfortable with your own skin, allowing a little more to show when you're around others. You might even be okay with a playful wardrobe malfunction." }, 50: { 'seen': false, 'media': 'src/history/dialog/exposition/50.mp4', 'text': "You're growing more open with your sexuality, not shying away from flirtatious glances or occasional skin contact. You're okay with being seen in lingerie or swimwear in public." }, 75: { 'seen': false, 'media': 'src/history/dialog/exposition/75.mp4', 'text': "You're at ease in your own skin and enjoy flaunting it. You don't mind changing in front of others and have a more relaxed attitude towards nudity in non-sexual settings." }, 100: { 'seen': false, 'media': 'src/history/dialog/exposition/100.mp4', 'text': "You've completely shed your inhibitions. Whether it's a nude beach or a wild party, you feel free and confident being naked. Your sexuality is a part of who you are, and you express it without reservation." } }, 'chef': { 'promotion_1': { 'seen': false, 'media': '', 'text': "Congratulations! You've been promoted to a higher rank in the kitchen. Your skills and dedication have paid off, and you're now recognized as a valuable member of the team." }, 'promotion_2': { 'seen': false, 'media': '', 'text': "Amazing work! You've reached the top of your culinary game. Your expertise and leadership in the kitchen are unmatched, and you're now a mentor to others." } }, 'perks': { gooner: { seen: false, text: "You've spent a lot of time pleasuring yourself. Masturbate 50 times.", media: "src/history/dialog/perks/gooner.mp4", }, cumLover: { seen: false, text: "You really enjoy swallowing. Swallow 50 times.", media: "src/history/dialog/perks/cumLover.mp4", }, sexAddict: { seen: false, text: "You just can't get enough. Have sex 50 times.", media: "src/history/dialog/perks/sexAddict.mp4", }, oralExpert: { seen: false, text: "Your mouth is a weapon of pleasure. Perform oral 50 times.", media: "src/history/dialog/perks/oralExpert.mp4", }, analMaster: { seen: false, text: "You've mastered the art of anal. Have anal sex 50 times.", media: "src/history/dialog/perks/analMaster.mp4", }, straightLover: { seen: false, text: "You love straight encounters. Have straight sex 50 times.", media: "src/history/dialog/perks/straightLover.mp4", }, lesbianLover: { seen: false, text: "You love lesbian encounters. Have lesbian sex 50 times.", media: "src/history/dialog/perks/lesbianLover.mp4", }, handjobExpert: { seen: false, text: "Your hands work magic. Give 50 handjobs.", media: "src/history/dialog/perks/handjobExpert.mp4", }, bisexualLover: { seen: false, text: "You enjoy both sides of pleasure. Unlock both Straight Lover and Lesbian Lover.", media: "src/history/dialog/perks/bisexualLover.mp4", }, gangbangPro: { seen: false, text: "You've become a true expert at handling group encounters. Your confidence and adventurous spirit make you the center of attention, and you thrive in the excitement of multiple partners.", media: "src/history/dialog/perks/gangbangPro.mp4", }, bimbo: { seen: false, text: "You've fully embraced the bimbo lifestyle—carefree, flirtatious, and irresistibly charming. Your looks, attitude, and playful nature turn heads everywhere you go. Intelligence takes a back seat to fun, pleasure, and living in the moment.", media: "src/history/dialog/perks/bimbo.mp4", } } }>> <<script>> /* <script> */ window.historyGameInit = function(selectedPortrait) { let char = State.getVar('$player'); if (selectedPortrait == 'src/mc/portraits/looks/0-1.jpg') { char.body.hair = 'blonde_long' } if (selectedPortrait == 'src/mc/portraits/looks/0-2.jpg') { char.body.hair = 'black_long' } if (selectedPortrait == 'src/mc/portraits/looks/0-3.jpg') { char.body.hair = 'red_long' } State.setVar('$gameInit', true); }; window.university = function(selection) { let player = State.getVar('$player'); let uniData = State.getVar('$uniData'); uniData.classesTaken++; if (selection === 'int') { player.stats.intelligence++; uniData.attentionCount++; showToast('', 'int'); } if (selection === 'cha') { player.stats.charisma++; uniData.socializeCount++; showToast('', 'cha'); } if (selection === 'flirt') { gainCorruption(1, 15); uniData.flirtCount++; } if (selection === 'flash') { gainExposition(1, 15); uniData.flashCount++; } useEnergy(30); useHygiene(50); useHunger(20); goToTime(16, 0, false); }; window.universityTest = function() { let uniData = State.getVar('$uniData'); let att = uniData.classesTaken / uniData.daysSinceEnroll; let pass = (att >= 0.7); if (pass) { uniData.testsPassed++; } if (uniData.testsPassed >= 3) { let weeklyChecks = State.getVar('$weeklyChecks'); uniData.graduated = true; uniData.enrolled = false; weeklyChecks.uni.status = false; showToast('You have graduated and received your diploma!'); } uniData.testsTaken++; uniData.classesTaken++; useEnergy(30); goToTime(16,0); return { passed: pass, }; }; window.triggerDialog = function(path, title = "History Dialog", repeatable = false) { let player = State.getVar('$player'); let historyDialogs = State.getVar('$historyDialogs'); let dialog = resolveByPath(historyDialogs, path); if (dialog.seen) { return; } if (!repeatable){ dialog.seen = true; } openDialog(title, '<p class="text-center text-lg font-bold">' + dialog.text + '</p><div class="media-wrapper mt-5"><<media "' + dialog.media + '">></div>'); }; <</script>>
<<script>> /* <script> */ setup.classes.Character = class { constructor(name) { this.name = name; this.portrait = ''; this.money = 500; this.energy = 100; this.max_energy = 100; this.hunger = 100; this.hygiene = 100; this.corruption = 0; this.exposition = 0; this.buttplug = false; this.status = { makeup: 'none', underwear: true, naked: false, cum: { face: false, body: false, inside: false, }, body_type: 'skinny', surgery: { recover: false, days : 0 } }; this.body = { hair: 'blonde_long', eyes: 'Black', skin: 'Pale', face: 'Acne', lips: 'Thin', breasts: 'Flat', bottom: 'Flat' }; this.stats = { looks: 0, intelligence: 0, fitness: 0, charisma: 0 }; this.skills = { gaming: 0, programming: 0, cooking: 0, makeup: 0, dancing: 0, }; this.inventory = { food: 5, makeup: 5, computer: false, phone: false, webcam: false, clothing: { outfit : ['default_outfit'], earring: [], neckwear: [], legwear: ['default_legwear'], shoes: ['default_shoes'], underwear: ['default_underwear'], buttwear: [], }, }; this.outfit = { outfit : 'default_outfit', earring: false, neckwear: false, legwear: 'default_legwear', shoes: 'default_shoes', underwear: 'default_underwear', buttwear: false }; this.tattoos = { wrists: false, arms: false, back: false, chest: false, legs: false, butt: false, face: false, pelvis: false, }; } }; const LOOKS_MAPPER = { face: { Acne: 0, Smooth: 7, Silk: 15 }, lips: { Thin: 0, Average: 5, Plump: 10, Bimbo: 15 }, breasts: { Flat: 0, Small: 5, Average: 8, Large: 12, Huge: 15 }, bottom: { Flat: 0, Small: 5, Average: 8, Large: 12, Huge: 15 }, makeup: { none: 0, light: 5, heavy: 10, slutty: 15, bimbo: 20, professional: 20, } }; const BREASTS_TYPE = { Flat: {desc: 'You are flat-chested', img: 'src/mc/body/top/flat.jpg'}, Small: {desc: 'You have small-sized breasts', img: 'src/mc/body/top/small.jpg'}, Average: {desc: 'You have average-sized breasts', img: 'src/mc/body/top/average.jpg'}, Large: {desc: 'You have large-sized breasts', img: 'src/mc/body/top/large.jpg'}, Huge: {desc: 'You have huge-sized breasts', img: 'src/mc/body/top/huge.jpg'} }; const BOTTOM_TYPES = { Flat: {desc: 'You have a flat butt', img: 'src/mc/body/bottom/flat.jpg'}, Small: {desc: 'You have a small butt', img: 'src/mc/body/bottom/small.jpg'}, Average: {desc: 'You have an average butt', img: 'src/mc/body/bottom/average.jpg'}, Large: {desc: 'You have a large butt', img: 'src/mc/body/bottom/large.jpg'}, Huge: {desc: 'You have a huge butt', img: 'src/mc/body/bottom/huge.jpg'} }; const FACE_TYPES = { Acne: {desc: 'You have acne on your face', img: 'src/mc/body/face/acne.jpg'}, Smooth: {desc: 'You have a smooth face', img: 'src/mc/body/face/smooth.jpg'}, Silk: {desc: 'You have a silky smooth face', img: 'src/mc/body/face/silk.jpg'}, }; const LIPS_TYPES = { Thin: {desc: 'You have thin lips', img: 'src/mc/body/lips/thin.jpg'}, Average: {desc: 'You have average lips', img: 'src/mc/body/lips/average.jpg'}, Plump: {desc: 'You have plump lips', img: 'src/mc/body/lips/plump.jpg'}, Bimbo: {desc: 'You have bimbo lips', img: 'src/mc/body/lips/bimbo.jpg'}, }; window.setName = function(name) { let player = State.getVar('$player'); player.name = name; }; window.setPortrait = function(portrait) { let player = State.getVar('$player'); player.portrait = portrait; }; window.shower = function() { let player = State.getVar('$player'); player.hygiene = 100; skipTime(0, 15, false); showToast('', 'hygiene'); clearCum() }; window.eat = function() { let player = State.getVar('$player'); State.setVar('$justEat', true); player.hunger = 100; showToast('', 'hunger'); }; window.sleep = function() { let player = State.getVar('$player'); player.energy = player.max_energy; player.hunger = Math.max(0, player.hunger - 30); player.hygiene = Math.max(0, player.hygiene - 30); if (player.buttplug) { player.buttplug = getRandomMedia('actions.status.buttplug'); } removeMakeup(); worldNextDay(); }; window.hasEnergy = function(energy) { let player = State.getVar('$player'); return player.energy >= energy; }; window.hasHygiene = function(hygiene) { let player = State.getVar('$player'); return player.hygiene >= hygiene; }; window.hasHunger = function(hunger) { let player = State.getVar('$player'); return player.hunger >= hunger; }; window.hasMoney = function(amount) { let player = State.getVar('$player'); return player.money >= amount; }; window.hasCorruption = function(amount) { let player = State.getVar('$player'); return player.corruption >= amount; }; window.hasExposition = function(amount) { let player = State.getVar('$player'); return player.exposition >= amount; }; window.hasStat = function(stat, amount) { let player = State.getVar('$player'); return player.stats[stat] >= amount; }; window.hasSkill = function(skill, amount) { let player = State.getVar('$player'); return player.skills[skill] >= amount; }; window.gainEnergy = function(amount) { let player = State.getVar('$player'); player.energy = Math.min(player.max_energy, player.energy + amount); }; window.useEnergy = function(energy) { let player = State.getVar('$player'); player.energy = Math.max(0, player.energy - energy); }; window.useMoney = function(amount) { let player = State.getVar('$player'); player.money = Math.max(0, player.money - amount); }; window.gainMoney = function(amount) { let player = State.getVar('$player'); player.money += amount; }; window.useHunger = function(amount) { let player = State.getVar('$player'); player.hunger = Math.max(0, player.hunger - amount); }; window.useHygiene = function(amount) { let player = State.getVar('$player'); player.hygiene = Math.max(0, player.hygiene - amount); }; window.gainCorruption = function(amount, max = 100) { let player = State.getVar('$player'); if (player.corruption >= max || amount <= 0) { return; } const oldCorruption = player.corruption; player.corruption = Math.min(max, player.corruption + amount); if (player.corruption > oldCorruption) { showToast('', 'cor'); } const corruptionMilestones = [15, 30, 50, 75, 100]; if (corruptionMilestones.includes(player.corruption)) { triggerDialog(`corruption.${player.corruption}`); } }; window.gainExposition = function(amount, max = 100) { let player = State.getVar('$player'); if (player.exposition >= max || amount <= 0) { return; } const oldExposition = player.exposition; player.exposition = Math.min(max, player.exposition + amount); if (player.exposition > oldExposition) { showToast('', 'expo'); } const expositionMilestones = [15, 30, 50, 75, 100]; if (expositionMilestones.includes(player.exposition)) { triggerDialog(`exposition.${player.exposition}`); } }; window.workout = function(type) { let player = State.getVar('$player'); let generalCounters = State.getVar('$generalCounters'); flipDailyCheck('workedOut'); player.stats.fitness += 1; generalCounters.gym[type]++; if (type == 'dance_lessons') { useMoney(50); learnSkill('dancing'); } else { useMoney(25); } useEnergy(30); useHunger(30); useHygiene(40); skipTime(1, 0, false); showToast('', 'fit'); }; window.playVideoGames = function() { let player = State.getVar('$player'); useEnergy(10); skipTime(1, 0); learnSkill('gaming'); flipDailyCheck('videoGames'); }; window.learnSkill = function(skill) { let player = State.getVar('$player'); player.skills[skill]++; showToast('', skill); }; window.watchPorn = function(source = 'home') { let player = State.getVar('$player'); let generalCounters = State.getVar('$generalCounters'); if (source === 'home') { flipDailyCheck('watchedPorn'); } else { flipDailyCheck('boothWatchedPorn'); } skipTime(0, 30); generalCounters.pornWatch++; gainCorruption(1, 15); }; window.addMakeup = function(type) { let player = State.getVar('$player'); let generalCounters = State.getVar('$generalCounters'); player.inventory.makeup = Math.max(0, player.inventory.makeup - 1); generalCounters.makeupApplied++; if (generalCounters.makeupApplied % 2 === 0) { learnSkill('makeup'); } player.status.makeup = type; }; window.removeMakeup = function() { let player = State.getVar('$player'); player.status.makeup = 'none'; }; window.practiceMakeup = function() { let player = State.getVar('$player'); player.inventory.makeup = Math.max(0, player.inventory.makeup - 1); learnSkill('makeup'); flipDailyCheck('practiceMakeup') }; window.practiceCooking = function() { learnSkill('cooking'); flipDailyCheck('practiceCooking'); }; window.practiceCharm = function() { let player = State.getVar('$player'); player.stats.charisma++; showToast('', 'cha'); flipDailyCheck('practiceCharm'); }; window.getCummed = function(type) { let player = State.getVar('$player'); const types = ['face', 'body', 'inside']; if (type === 'face') { player.status.cum[type] = getRandomMedia('actions.status.cumface'); } if (type === 'body') { player.status.cum[type] = getRandomMedia('actions.status.cumbody'); } if (type === 'inside') { player.status.cum[type] = getRandomMedia('actions.status.cuminside'); } }; window.clearCum = function() { let player = State.getVar('$player'); player.status.cum.face = false; player.status.cum.body = false; player.status.cum.inside = false; }; window.calculateLooks = function() { const baseLooks = 0; let player = State.getVar('$player'); let fitnessMod = Math.min(20, Math.floor(player.stats.fitness / 5)); let makeupBoost = LOOKS_MAPPER.makeup[player.status.makeup]; let lipsBoost = LOOKS_MAPPER.lips[player.body.lips]; let faceBoost = LOOKS_MAPPER.face[player.body.face]; let breastsBoost = LOOKS_MAPPER.breasts[player.body.breasts]; let bottomBoost = LOOKS_MAPPER.bottom[player.body.bottom]; player.stats.looks = baseLooks + makeupBoost + lipsBoost + faceBoost + fitnessMod + breastsBoost + bottomBoost; player.stats.looks = Math.min(100, player.stats.looks); const looksMilestones = [15, 30, 50, 75, 100]; looksMilestones.forEach(milestone => { if (player.stats.looks >= milestone) { triggerDialog(`looks.${milestone}`); } }); }; window.calculateBodyType = function() { let player = State.getVar('$player'); let generalCounters = State.getVar('$generalCounters'); if (player.corruption <= 10) { player.status.body_type = 'pure'; return; } let skinny = generalCounters.gym.cardio >= generalCounters.gym.full_body; if (player.fitness <= 20 && skinny) { player.status.body_type = 'skinny'; } if (player.fitness <= 30 && skinny) { player.status.body_type = 'fit'; } if (player.fitness <= 40 && skinny) { player.status.body_type = 'hot'; } if (player.fitness <= 50 && !skinny) { player.status.body_type = 'thick'; } }; window.drainStatsTime = function(timePassed) { let player = State.getVar('$player'); let totalMinutes = timePassed.hours * 60 + timePassed.minutes; let deduct = Math.ceil(totalMinutes / 10); player.hygiene = Math.max(0, player.hygiene - deduct); player.hunger = Math.max(0, player.hunger - deduct); }; window.handleBodyData = function(type) { let player = State.getVar('$player'); if (type == 'top') { return BREASTS_TYPE[player.body.breasts]; } if (type == 'bottom') { return BOTTOM_TYPES[player.body.bottom]; } if (type == 'lips') { return LIPS_TYPES[player.body.lips]; } if (type == 'face') { return FACE_TYPES[player.body.face]; } }; window.hasTattoos = function() { let player = State.getVar('$player'); return Object.values(player.tattoos).some(v => v !== false); }; window.surgery = function(surgeryType, value) { let player = State.getVar('$player'); switch(surgeryType) { case 'small_ass': player.body.bottom = 'Small'; break; case 'average_ass': player.body.bottom = 'Average'; break; case 'large_ass': player.body.bottom = 'Large'; break; case 'huge_ass': player.body.bottom = 'Huge'; break; case 'small_breasts': player.body.breasts = 'Small'; break; case 'average_breasts': player.body.breasts = 'Average'; break; case 'large_breasts': player.body.breasts = 'Large'; break; case 'huge_breasts': player.body.breasts = 'Huge'; break; case 'smooth_skin': player.body.face = 'Smooth'; break; case 'silk_smooth_skin': player.body.face = 'Silk'; break; case 'average_lips': player.body.lips = 'Average'; break; case 'plump_lips': player.body.lips = 'Plump'; break; case 'bimbo_lips': player.body.lips = 'Bimbo'; break; } player.status.surgery.recover = true; player.status.surgery.days = 2; calculateLooks(); checkPerkUnlocks(); useMoney(value); skipTime(2, 0, false); }; window.maxLooks = function() { let player = State.getVar('$player'); player.stats.looks = 100; player.body.breasts = 'Huge'; player.body.bottom = 'Huge'; player.body.lips = 'Bimbo'; player.body.face = 'Silk'; player.status.makeup = 'bimbo'; player.stats.fitness = 100; calculateLooks(); checkPerkUnlocks(); }; <</script>>
<<set $tattooItems = {"back": {"simple_back_tattoo_1": {"name": "Simple Back Tattoo 1", "cost": 500, "asset": "src/items/tattoos/back/simple_back_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_back_tattoo_2": {"name": "Simple Back Tattoo 2", "cost": 500, "asset": "src/items/tattoos/back/simple_back_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_back_tattoo_3": {"name": "Simple Back Tattoo 3", "cost": 500, "asset": "src/items/tattoos/back/simple_back_tattoo_3.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_back_tattoo_1": {"name": "Edgy Back Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/back/edgy_back_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_back_tattoo_2": {"name": "Edgy Back Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/back/edgy_back_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_back_tattoo_1": {"name": "Slutty Back Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/back/slutty_back_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_back_tattoo_2": {"name": "Slutty Back Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/back/slutty_back_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_back_tattoo_3": {"name": "Slutty Back Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/back/slutty_back_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_back_tattoo_4": {"name": "Slutty Back Tattoo 4", "cost": 5000, "asset": "src/items/tattoos/back/slutty_back_tattoo_4.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_back_tattoo_5": {"name": "Slutty Back Tattoo 5", "cost": 5000, "asset": "src/items/tattoos/back/slutty_back_tattoo_5.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "butt": {"simple_butt_tattoo_1": {"name": "Simple Butt Tattoo 1", "cost": 500, "asset": "src/items/tattoos/butt/simple_butt_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_butt_tattoo_2": {"name": "Simple Butt Tattoo 2", "cost": 500, "asset": "src/items/tattoos/butt/simple_butt_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_butt_tattoo_3": {"name": "Simple Butt Tattoo 3", "cost": 500, "asset": "src/items/tattoos/butt/simple_butt_tattoo_3.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_butt_tattoo_1": {"name": "Edgy Butt Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/butt/edgy_butt_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_butt_tattoo_2": {"name": "Edgy Butt Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/butt/edgy_butt_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_butt_tattoo_1": {"name": "Slutty Butt Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/butt/slutty_butt_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_butt_tattoo_2": {"name": "Slutty Butt Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/butt/slutty_butt_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_butt_tattoo_3": {"name": "Slutty Butt Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/butt/slutty_butt_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_butt_tattoo_4": {"name": "Slutty Butt Tattoo 4", "cost": 5000, "asset": "src/items/tattoos/butt/slutty_butt_tattoo_4.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_butt_tattoo_5": {"name": "Slutty Butt Tattoo 5", "cost": 5000, "asset": "src/items/tattoos/butt/slutty_butt_tattoo_5.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "wrists": {"simple_wrist_tattoo_1": {"name": "Simple Wrist Tattoo 1", "cost": 500, "asset": "src/items/tattoos/wrists/simple_wrist_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_wrist_tattoo_2": {"name": "Simple Wrist Tattoo 2", "cost": 500, "asset": "src/items/tattoos/wrists/simple_wrist_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_wrist_tattoo_1": {"name": "Edgy Wrist Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/wrists/edgy_wrist_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_wrist_tattoo_1": {"name": "Slutty Wrist Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/wrists/slutty_wrist_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_wrist_tattoo_2": {"name": "Slutty Wrist Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/wrists/slutty_wrist_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "legs": {"simple_leg_tattoo_1": {"name": "Simple Leg Tattoo 1", "cost": 500, "asset": "src/items/tattoos/legs/simple_leg_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_leg_tattoo_2": {"name": "Simple Leg Tattoo 2", "cost": 500, "asset": "src/items/tattoos/legs/simple_leg_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_leg_tattoo_1": {"name": "Edgy Leg Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/legs/edgy_leg_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_leg_tattoo_2": {"name": "Edgy Leg Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/legs/edgy_leg_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_leg_tattoo_1": {"name": "Slutty Leg Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/legs/slutty_leg_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_leg_tattoo_2": {"name": "Slutty Leg Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/legs/slutty_leg_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_leg_tattoo_3": {"name": "Slutty Leg Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/legs/slutty_leg_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "arms": {"simple_arm_tattoo_1": {"name": "Simple Arm Tattoo 1", "cost": 500, "asset": "src/items/tattoos/arms/simple_arm_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_arm_tattoo_2": {"name": "Simple Arm Tattoo 2", "cost": 500, "asset": "src/items/tattoos/arms/simple_arm_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_arm_tattoo_1": {"name": "Edgy Arm Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/arms/edgy_arm_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_arm_tattoo_2": {"name": "Edgy Arm Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/arms/edgy_arm_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_arm_tattoo_1": {"name": "Slutty Arm Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/arms/slutty_arm_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_arm_tattoo_2": {"name": "Slutty Arm Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/arms/slutty_arm_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_arm_tattoo_3": {"name": "Slutty Arm Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/arms/slutty_arm_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "face": {"simple_face_tattoo_1": {"name": "Simple Face Tattoo 1", "cost": 500, "asset": "src/items/tattoos/face/simple_face_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_face_tattoo_2": {"name": "Simple Face Tattoo 2", "cost": 500, "asset": "src/items/tattoos/face/simple_face_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_face_tattoo_1": {"name": "Edgy Face Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/face/edgy_face_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_face_tattoo_2": {"name": "Edgy Face Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/face/edgy_face_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_face_tattoo_1": {"name": "Slutty Face Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_face_tattoo_2": {"name": "Slutty Face Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_face_tattoo_3": {"name": "Slutty Face Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_face_tattoo_4": {"name": "Slutty Face Tattoo 4", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_4.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_face_tattoo_5": {"name": "Slutty Face Tattoo 5", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_5.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_face_tattoo_6": {"name": "Slutty Face Tattoo 6", "cost": 5000, "asset": "src/items/tattoos/face/slutty_face_tattoo_6.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "chest": {"simple_chest_tattoo_1": {"name": "Simple Chest Tattoo 1", "cost": 500, "asset": "src/items/tattoos/chest/simple_chest_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_chest_tattoo_2": {"name": "Simple Chest Tattoo 2", "cost": 500, "asset": "src/items/tattoos/chest/simple_chest_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_chest_tattoo_1": {"name": "Edgy Chest Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/chest/edgy_chest_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_chest_tattoo_2": {"name": "Edgy Chest Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/chest/edgy_chest_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_chest_tattoo_1": {"name": "Slutty Chest Tattoo 1", "cost": 5000, "asset": "src/items/tattoos/chest/slutty_chest_tattoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_chest_tattoo_2": {"name": "Slutty Chest Tattoo 2", "cost": 5000, "asset": "src/items/tattoos/chest/slutty_chest_tattoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_chest_tattoo_3": {"name": "Slutty Chest Tattoo 3", "cost": 5000, "asset": "src/items/tattoos/chest/slutty_chest_tattoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_chest_tattoo_4": {"name": "Slutty Chest Tattoo 4", "cost": 5000, "asset": "src/items/tattoos/chest/slutty_chest_tattoo_4.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_chest_tattoo_5": {"name": "Slutty Chest Tattoo 5", "cost": 5000, "asset": "src/items/tattoos/chest/slutty_chest_tattoo_5.jpg", "reqs": {"corruption": 50, "exposition": 50}}}, "pelvis": {"simple_pelvis_tattoo_1": {"name": "Simple Pelvis Tattoo 1", "cost": 500, "asset": "src/items/tattoos/pelvis/simple_pelvis_tattoo_1.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_pelvis_tattoo_2": {"name": "Simple Pelvis Tattoo 2", "cost": 500, "asset": "src/items/tattoos/pelvis/simple_pelvis_tattoo_2.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "simple_pelvis_tattoo_3": {"name": "Simple Pelvis Tattoo 3", "cost": 500, "asset": "src/items/tattoos/pelvis/simple_pelvis_tattoo_3.jpg", "reqs": {"corruption": 10, "exposition": 10}}, "edgy_pelvis_tattoo_1": {"name": "Edgy Pelvis Tattoo 1", "cost": 2000, "asset": "src/items/tattoos/pelvis/edgy_pelvis_tattoo_1.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_pelvis_tattoo_2": {"name": "Edgy Pelvis Tattoo 2", "cost": 2000, "asset": "src/items/tattoos/pelvis/edgy_pelvis_tattoo_2.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "edgy_pelvis_tattoo_3": {"name": "Edgy Pelvis Tattoo 3", "cost": 2000, "asset": "src/items/tattoos/pelvis/edgy_pelvis_tattoo_3.jpg", "reqs": {"corruption": 30, "exposition": 30}}, "slutty_pelvis_tatoo_1": {"name": "Slutty Pelvis Tatoo 1", "cost": 5000, "asset": "src/items/tattoos/pelvis/slutty_pelvis_tatoo_1.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_pelvis_tatoo_2": {"name": "Slutty Pelvis Tatoo 2", "cost": 5000, "asset": "src/items/tattoos/pelvis/slutty_pelvis_tatoo_2.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_pelvis_tatoo_3": {"name": "Slutty Pelvis Tatoo 3", "cost": 5000, "asset": "src/items/tattoos/pelvis/slutty_pelvis_tatoo_3.jpg", "reqs": {"corruption": 50, "exposition": 50}}, "slutty_pelvis_tatoo_4": {"name": "Slutty Pelvis Tatoo 4", "cost": 5000, "asset": "src/items/tattoos/pelvis/slutty_pelvis_tatoo_4.jpg", "reqs": {"corruption": 50, "exposition": 50}}}} >>
<<script>> /* <script> */ window.handleFile = function(path) { let player = State.getVar('$player'); let initialPath = resolveByPath(mediaDB, path); let basePath = 'src/'+ path.replace(/\./g, '/') + '/'; if (initialPath.hasOwnProperty(player.status.body_type)) { let medias = initialPath[player.status.body_type]; return basePath + medias.random(); } else { return basePath + Object.values(initialPath).flat().filter(Boolean).random(); } }; window.getRandomMedia = function(path) { let basePath = 'src/'+ path.replace(/\./g, '/') + '/'; let files = resolveByPath(mediaDB, path); return basePath + Object.values(files).flat().filter(Boolean).random(); }; window.isVideo = function (path) { return path.includes('.mp4') || path.includes('.webm'); }; window.resolveByPath = function (obj, path) { return path.split('.').reduce((acc, key) => acc?.[key], obj); }; let mediaDB = {"actions":{"onlyfans":{"naked":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-6.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"masturbate":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"bikini":{"skinny":["skinny-2.mp4","skinny-5.jpg","skinny-4.jpg","skinny-3.jpg","skinny-6.mp4","skinny-1.jpg"]},"group":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-3.mp4"]},"lesbian":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"blowjob":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-3.mp4"]},"dildo":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"dildo_anal":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"tease":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-3.mp4"]},"sex":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-5.mp4","skinny-3.mp4"]},"cumplay":{"skinny":["skinny-2.mp4","skinny-1.mp4","skinny-4.mp4","skinny-3.mp4"]}},"porn":{"group":{"group":["group-2.webp","group-3.webp","group-8.webp","group-5.webp","group-4.webp","group-7.webp","group-1.webp","group-6.webp"]},"lesbian":{"lesbian":["lesbian-3.webp","lesbian-4.webp","lesbian-7.webp","lesbian-6.webp","lesbian-2.webp","lesbian-5.webp","lesbian-1.webp"]},"hardcore":{"hardcore":["hardcore-7.webp","hardcore-3.webp","hardcore-4.webp","hardcore-2.webp","hardcore-1.webp","hardcore-6.webp","hardcore-5.webp"]},"anal":{"anal":["anal-2.webp","anal-1.webp","anal-4.webp","anal-6.webp","anal-3.webp","anal-8.webp","anal-5.webp","anal-7.webp"]},"straight":{"straight":["straight-2.webp","straight-5.webp","straight-7.webp","straight-6.webp","straight-4.webp","straight-3.webp","straight-1.webp"]}},"status":{"cuminside":{"inside":["inside-6.mp4","inside-3.mp4","inside-4.mp4","inside-2.mp4","inside-5.mp4","inside-1.mp4"]},"cumface":{"facial":["facial-4.mp4","facial-5.mp4","facial-1.mp4","facial-3.mp4","facial-2.mp4"]},"buttplug":{"buttplug":["buttplug-8.mp4","buttplug-9.mp4","buttplug-7.mp4","buttplug-5.mp4","buttplug-3.mp4","buttplug-2.mp4","buttplug-4.mp4","buttplug-1.mp4","buttplug-6.mp4"]},"cumbody":{"outside":["outside-1.mp4","outside-2.mp4","outside-4.mp4","outside-3.mp4","outside-5.mp4"]}},"work":{"restaurant":{"waitress":{"heavy":{"heavy":["heavy-1.gif","heavy-2.gif"]},"flirt":{"flirt":["flirt-2.mp4","flirt-5.mp4","flirt-4.mp4","flirt-1.mp4","flirt-6.mp4","flirt-7.mp4","flirt-3.mp4"]},"fuck":{"fuck":["fuck-5.mp4","fuck-4.mp4","fuck-6.mp4","fuck-3.mp4","fuck-1.mp4","fuck-2.mp4"]},"tease":{"tease":["tease-2.mp4","tease-3.mp4","tease-5.mp4","tease-1.mp4","tease-4.mp4"]},"light":{"light":["light-2.gif","light-1.gif"]},"fame":{"hardworker":{},"slacker":{},"chatter":{},"slutty":{},"flirter":{}},"chat":{"chat":["chat-3.jpg","chat-2.jpg","chat-4.jpg","chat-1.jpg"]},"blow":{"blow":["blow-5.mp4","blow-2.mp4","blow-6.mp4","blow-3.mp4","blow-4.mp4","blow-1.mp4"]}},"chef":{"cheap":{"cheap":["cheap-3.jpg","cheap-1.jpg","cheap-2.jpg"]},"medium":{"medium":["medium-2.jpg","medium-1.jpg","medium-3.jpg"]},"fancy":{"fancy":["fancy-2.jpg","fancy-1.jpg","fancy-3.jpg"]}}},"gloryhole":{"invite":{"invite":["invite-1.mp4","invite-2.mp4","invite-5.mp4","invite-3.mp4","invite-4.mp4"]},"blowjob":{"bj":["bj-2.mp4","bj-3.mp4","bj-1.mp4","bj-4.mp4","bj-5.mp4"]},"anal":{"anal":["anal-3.mp4","anal-4.mp4","anal-5.mp4","anal-1.mp4","anal-2.mp4"]},"present":{"present":["present-2.mp4","present-3.mp4","present-1.mp4","present-5.mp4","present-4.mp4"]},"booth":{"booth":["booth-1.mp4","booth-2.mp4"]},"handjob":{"hj":["hj-5.mp4","hj-1.mp4","hj-4.mp4","hj-2.mp4","hj-3.mp4"]},"sex":{"sex":["sex-5.mp4","sex-3.mp4","sex-2.mp4","sex-1.mp4","sex-4.mp4"]},"finish":{"inside":{"inside":["inside-3.mp4","inside-4.mp4","inside-2.mp4","inside-1.mp4"]},"outside":{"outside":["outside-1.mp4","outside-2.mp4","outside-4.mp4","outside-3.mp4"]},"swallow":{"swallow":["swallow-4.mp4","swallow-2.mp4","swallow-3.mp4","swallow-5.mp4","swallow-1.mp4"]},"facial":{"facial":["facial-4.mp4","facial-1.mp4","facial-3.mp4","facial-2.mp4"]}},"multiple":{"multiple":["multiple-2.mp4","multiple-3.mp4","multiple-1.mp4","multiple-4.mp4"]}},"stripper":{"private_sex":{"private_sex":["private_sex-6.mp4","private_sex-3.mp4","private_sex-5.mp4","private_sex-2.mp4","private_sex-1.mp4","private_sex-4.mp4"]},"dance":{"dance":["dance-3.mp4","dance-4.mp4","dance-2.mp4","dance-1.mp4","dance-5.mp4"]},"private_party":{"private_party":["private_party-4.mp4","private_party-1.mp4","private_party-3.mp4","private_party-5.mp4","private_party-2.mp4"]},"private_dance":{"private_dance":["private_dance-6.mp4","private_dance-7.mp4","private_dance-2.mp4","private_dance-1.mp4","private_dance-3.mp4","private_dance-4.mp4","private_dance-5.mp4"]},"naked_dance":{"naked_dance":["naked_dance-1.mp4","naked_dance-5.mp4","naked_dance-4.mp4","naked_dance-3.mp4","naked_dance-2.mp4"]}},"prostitute":{"group":{"group":["group-5.mp4","group-7.mp4","group-6.mp4","group-4.mp4","group-1.mp4","group-2.mp4","group-8.mp4","group-3.mp4"]},"lesbian":{"lesbian":["lesbian-7.mp4","lesbian-1.mp4","lesbian-6.mp4","lesbian-8.mp4","lesbian-3.mp4","lesbian-5.mp4","lesbian-9.mp4","lesbian-2.mp4","lesbian-4.mp4"]},"blowjob":{"blowjob":["blowjob-1.mp4","blowjob-3.mp4","blowjob-6.mp4","blowjob-7.mp4","blowjob-2.mp4","blowjob-5.mp4","blowjob-4.mp4"]},"fail":{"fail":["fail-2.jpg","fail-1.jpg","fail-3.jpg"]},"handjob":{"handjob":["handjob-1.mp4","handjob-4.mp4","handjob-3.mp4","handjob-2.mp4"]},"sex":{"sex":["sex-5.mp4","sex-7.mp4","sex-3.mp4","sex-8.mp4","sex-2.mp4","sex-1.mp4","sex-4.mp4","sex-6.mp4"]},"walk":{"walk":["walk-1.mp4","walk-4.mp4","walk-8.mp4","walk-5.mp4","walk-3.mp4","walk-7.mp4","walk-9.mp4","walk-6.mp4","walk-2.mp4"]}},"pornstar":{"gangbang":{"gangbang":["gangbang-2.mp4","gangbang-3.mp4","gangbang-1.mp4","gangbang-5.mp4","gangbang-4.mp4"]},"group":{"group":["group-4.mp4","group-1.mp4","group-2.mp4","group-3.mp4"]},"lesbian":{"lesbian":["lesbian-1.mp4","lesbian-3.mp4","lesbian-2.mp4","lesbian-4.mp4"]},"solo":{"solo":["solo-3.mp4","solo-1.mp4","solo-2.mp4","solo-4.mp4"]},"anal":{"anal":["anal-3.mp4","anal-4.mp4","anal-1.mp4","anal-2.mp4"]},"bukkake":{"blowbang":["blowbang-1.mp4","blowbang-4.mp4","blowbang-5.mp4","blowbang-3.mp4","blowbang-2.mp4"]},"piss":{"piss":["piss-1.mp4","piss-4.mp4","piss-3.mp4","piss-2.mp4"]},"straight":{"straight":["straight-2.mp4","straight-4.mp4","straight-5.mp4","straight-3.mp4","straight-1.mp4"]}},"streaming":{"75":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-3.jpg","streaming-4.jpg"]},"0":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-5.jpg","streaming-3.jpg","streaming-4.jpg"]},"15":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-3.jpg","streaming-4.jpg"]},"30":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-5.jpg","streaming-3.jpg","streaming-4.jpg"]},"50":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-3.jpg","streaming-4.jpg"]},"100":{"streaming":["streaming-2.jpg","streaming-1.jpg","streaming-3.jpg","streaming-4.jpg"]}},"modelling":{"magazine_photoshoot":{"magazine_photoshoot":["magazine_photoshoot-3.jpg","magazine_photoshoot-4.jpg","magazine_photoshoot-1.jpg","magazine_photoshoot-2.jpg"]},"erotic_photoshoot":{"erotic_photoshoot":["erotic_photoshoot-2.jpg","erotic_photoshoot-9.jpg","erotic_photoshoot-10.jpg","erotic_photoshoot-7.jpg","erotic_photoshoot-1.jpg","erotic_photoshoot-11.jpg","erotic_photoshoot-3.jpg","erotic_photoshoot-8.jpg","erotic_photoshoot-4.jpg","erotic_photoshoot-5.jpg","erotic_photoshoot-6.jpg"]},"amateur_runway":{"amateur_runway":["amateur_runway-1.jpg","amateur_runway-2.jpg","amateur_runway-3.jpg","amateur_runway-4.jpg"]},"catalog_photoshoot":{"catalog_photoshoot":["catalog_photoshoot-1.jpg","catalog_photoshoot-2.jpg","catalog_photoshoot-5.jpg","catalog_photoshoot-9.jpg","catalog_photoshoot-6.jpg","catalog_photoshoot-10.jpg","catalog_photoshoot-7.jpg","catalog_photoshoot-8.jpg","catalog_photoshoot-3.jpg","catalog_photoshoot-4.jpg"]},"international_runway":{"international_runway":["international_runway-3.jpg","international_runway-4.jpg","international_runway-1.jpg","international_runway-2.jpg"]},"amateur_photoshoot":{"amateur_photoshoot":["amateur_photoshoot-1.jpg","amateur_photoshoot-7.jpg","amateur_photoshoot-6.jpg","amateur_photoshoot-2.jpg","amateur_photoshoot-3.jpg","amateur_photoshoot-10.jpg","amateur_photoshoot-9.jpg","amateur_photoshoot-4.jpg","amateur_photoshoot-5.jpg","amateur_photoshoot-8.jpg"]},"adult_photoshoot":{"adult_photoshoot":["adult_photoshoot-12.jpg","adult_photoshoot-7.jpg","adult_photoshoot-9.jpg","adult_photoshoot-11.jpg","adult_photoshoot-10.jpg","adult_photoshoot-1.jpg","adult_photoshoot-2.jpg","adult_photoshoot-14.jpg","adult_photoshoot-6.jpg","adult_photoshoot-5.jpg","adult_photoshoot-3.jpg","adult_photoshoot-4.jpg","adult_photoshoot-8.jpg","adult_photoshoot-15.jpg","adult_photoshoot-16.jpg"]},"bikini_lingerie_photoshoot":{"bikini_lingerie_photoshoot":["bikini_lingerie_photoshoot-10.jpg","bikini_lingerie_photoshoot-9.jpg","bikini_lingerie_photoshoot-5.jpg","bikini_lingerie_photoshoot-11.jpg","bikini_lingerie_photoshoot-1.jpg","bikini_lingerie_photoshoot-4.jpg","bikini_lingerie_photoshoot-6.jpg","bikini_lingerie_photoshoot-8.jpg","bikini_lingerie_photoshoot-7.jpg","bikini_lingerie_photoshoot-3.jpg","bikini_lingerie_photoshoot-2.jpg"]}},"office":{"charm":{"charm":["charm-2.jpg","charm-4.jpg","charm-3.jpg","charm-5.jpg","charm-1.jpg"]},"heavy":{"heavy":["heavy-1.gif","heavy-2.gif"]},"flirt":{"flirt":["flirt-2.mp4","flirt-5.mp4","flirt-4.mp4","flirt-8.mp4","flirt-1.mp4","flirt-9.mp4","flirt-6.mp4","flirt-7.mp4","flirt-3.mp4"]},"fuck":{"fuck":["fuck-5.mp4","fuck-4.mp4","fuck-6.mp4","fuck-3.mp4","fuck-1.mp4","fuck-2.mp4","fuck-7.mp4"]},"tease":{"tease":["tease-2.mp4","tease-7.mp4","tease-3.mp4","tease-8.mp4","tease-6.mp4","tease-5.mp4","tease-1.mp4","tease-4.mp4"]},"light":{"light":["light-3.gif","light-2.gif","light-1.gif"]},"fame":{"officeMattress":{"officeMattress":["officeMattress-1.mp4"]},"chatter":{"chatter":["chatter-1.mp4"]},"dickSucker":{"dickSucker":["dickSucker-1.mp4"]},"flirter":{"flirter":["flirter-2.mp4","flirter-1.mp4"]}},"blow":{"blow":["blow-5.mp4","blow-7.mp4","blow-2.mp4","blow-6.mp4","blow-3.mp4","blow-4.mp4","blow-1.mp4"]}}},"instagram":{"bikini":{"bikini":["bikini-6.jpg","bikini-1.jpg","bikini-3.jpg","bikini-5.jpg","bikini-4.jpg","bikini-2.jpg"]},"selfie":{"selfie":["selfie-3.jpg","selfie-1.jpg","selfie-4.jpg","selfie-2.jpg","selfie-5.jpg"]},"random":{"random":["random-1.jpg","random-2.jpg"]},"thirst":{"thirst":["thirst-4.jpg","thirst-3.jpg","thirst-6.jpg","thirst-1.jpg","thirst-5.jpg","thirst-2.jpg","thirst-7.jpg"]},"full_body":{"full":["full-4.jpg","full-1.jpg","full-3.jpg","full-5.jpg","full-2.jpg"]}},"shower":{"shower":["shower-6.mp4","shower-2.mp4","shower-4.mp4","shower-1.mp4","shower-7.mp4","shower-5.mp4","shower-3.mp4"]},"sex":{"masturbate":{"pc":{"masturbate":["masturbate-11.mp4","masturbate-1.mp4","masturbate-2.mp4","masturbate-8.mp4","masturbate-4.mp4","masturbate-10.mp4","masturbate-12.mp4","masturbate-7.mp4","masturbate-3.mp4","masturbate-9.mp4","masturbate-5.mp4","masturbate-6.mp4"]},"shower":{"masturbate":["masturbate-1.mp4","masturbate-2.mp4","masturbate-8.mp4","masturbate-4.mp4","masturbate-7.mp4","masturbate-3.mp4","masturbate-9.mp4","masturbate-5.mp4","masturbate-6.mp4"]},"gloryhole":{}},"orgasm":{"masturbate":{"skinny":["skinny-2.mp4","skinny-1.mp4"]},"gloryhole":{"cum":["cum-1.mp4"]}}},"mundane":{"cooking":{"cooking":["cooking-6.mp4","cooking-3.gif","cooking-7.mp4","cooking-5.jpg","cooking-1.mp4","cooking-2.mp4","cooking-4.mp4"]},"socialize":{"bar":{}},"sleep":{"sleep":["sleep-5.jpg","sleep-13.mp4","sleep-12.jpg","sleep-7.mp4","sleep-2.jpg","sleep-1.jpg","sleep-10.gif","sleep-3.gif","sleep-6.jpg","sleep-9.mp4","sleep-4.gif","sleep-8.gif","sleep-11.gif"]},"gaming":{"gaming":["gaming-3.mp4","gaming-2.mp4","gaming-6.webp","gaming-4.mp4","gaming-8.mp4","gaming-1.mp4","gaming-7.mp4"]},"eat":{"eat":["eat-4.jpg","eat-1.mp4","eat-5.mp4","eat-2.mp4","eat-3.jpg","eat-6.jpg"]}},"gym":{"dance":{"corrupted":{"dance":["dance-2.webp","dance-4.mp4","dance-8.mp4","dance-3.webp","dance-1.mp4","dance-6.mp4","dance-5.mp4","dance-7.mp4"]},"pure":{}},"workout":{"corrupted":{"corrupted":["corrupted-7.mp4","corrupted-5.mp4","corrupted-2.mp4","corrupted-8.mp4","corrupted-6.mp4","corrupted-3.mp4","corrupted-4.mp4","corrupted-1.mp4"]},"pure":{"pure":["pure-4.gif","pure-3.mp4","pure-1.mp4","pure-2.webp"]}}},"university":{"focus":{"focus":["focus-4.jpg","focus-2.jpg","focus-1.jpg","focus-3.jpg"]},"flirt":{"flirt":["flirt-2.mp4","flirt-5.mp4","flirt-4.mp4","flirt-1.mp4","flirt-6.mp4","flirt-3.mp4"]},"socialize":{"socialize":["socialize-1.jpg","socialize-2.jpg","socialize-3.jpg","socialize-4.jpg"]},"flash":{"flash":["flash-2.mp4","flash-3.mp4","flash-1.mp4","flash-4.mp4","flash-5.mp4"]}}}} <</script>>
<<set $worldDate = new Date(2025, 0, 6, 7, 0, 0)>> <<set $forceDayOver = false>> <<set $currentHome = 'cheap_apartment'>> <<set $dailyChecks = { 'watchedPorn': false, 'boothWatchedPorn': false, 'workedOut': false, 'videoGames': false, 'instagramPost': false, 'onlyFansPost': false, 'computerLearnSkill': false, 'devWork': false, 'practiceMakeup': false, 'practiceCooking': false, 'practiceCharm': false } >> <<set $weeklyChecks = { 'uni': { 'status' : false, 'value': 50 }, 'rent': { 'status' : true, 'value': 200 }, 'phone': { 'status' : false, 'value': 10 }, 'bills': { 'status' : false, 'value': 50 }, } >> <<set $realEstateData = { 'cheap_apartment': { 'name': 'Cheap Apartment', 'price': 1000, 'rent': 200, }, 'medium': { 'name': 'Medium Apartment', 'price': 10000, 'rent': 1000, }, 'big': { 'name': 'Big Apartment', 'price': 20000, 'rent': 3000, }, 'house': { 'name': 'Nice House', 'price': 50000, 'rent': 5000, }, 'mansion': { 'name': 'Mansion', 'price': 200000, 'rent': 10000, } } >> <<script>> /* <script> */ window.worldNextDay = function () { let worldDate = State.getVar('$worldDate'); const newDate = new Date(worldDate); newDate.setHours(8, 0, 0, 0); if (newDate <= worldDate) { newDate.setDate(newDate.getDate() + 1); } dailyRoutine(newDate); resetDailyChecks(); if (newDate.getDay() === 1) { weeklyChecks(); } State.setVar('$worldDate', newDate); }; window.checkTooLate = function () { let worldDate = State.getVar('$worldDate'); if (worldDate.getHours() >= 3 && (worldDate.getHours() < 6)) { return true; } return false; }; window.skipTime = function (hours, minutes, drainStats = true) { let worldDate = State.getVar('$worldDate'); const newDate = new Date(worldDate); newDate.setHours(worldDate.getHours() + hours); newDate.setMinutes(worldDate.getMinutes() + minutes); if (drainStats) { drainStatsTime(getTimeDiff(worldDate, newDate)); } State.setVar('$worldDate', newDate); if (checkTooLate()) { State.setVar('$forceDayOver', true); } }; window.goToTime = function(hours, minutes, drainStats = true, nextDay = false) { let worldDate = State.getVar('$worldDate'); const newDate = new Date(worldDate); if(nextDay) { newDate.setDate(newDate.getDate() + 1); } newDate.setHours(hours); newDate.setMinutes(minutes); if (drainStats) { drainStatsTime(getTimeDiff(worldDate, newDate)); } State.setVar('$worldDate', newDate); }; window.isBusinessOpen = function(weekdays, openHour, closeHour) { const worldDate = State.getVar('$worldDate'); if (!(worldDate instanceof Date)) return false; const currentDay = worldDate.getDay(); const currentHour = worldDate.getHours(); if (!weekdays.includes(currentDay)) return false; if (closeHour < openHour) { if (currentHour >= openHour) return true; if (currentHour <= closeHour) return true; return false; } return currentHour >= openHour && currentHour <= closeHour; }; window.dailyRoutine = function(newDate) { let player = State.getVar('$player'); let uniData = State.getVar('$uniData'); if (uniData.enrolled) { if(newDate.getDay() % 6 !== 0) { uniData.daysSinceEnroll++; } uniData.testDay = false; if(uniData.daysSinceEnroll % 5 === 0) { uniData.testDay = true; } } if (player.status.surgery.recover) { player.status.surgery.days--; if (player.status.surgery.days <= 0) { player.status.surgery.recover = false; player.status.surgery.days = 0; } } }; window.resetDailyChecks = function() { let dailyChecks = State.getVar('$dailyChecks'); Object.keys(dailyChecks).forEach(key => { dailyChecks[key] = false; }); }; window.weeklyChecks = function() { let weeklyChecks = State.getVar('$weeklyChecks'); let pornStarData = State.getVar('$pornStarData'); let player = State.getVar('$player'); pornStarData.weeklyVideos = 0; if (weeklyChecks.rent.status) { useMoney(weeklyChecks.rent.value) } if (weeklyChecks.uni.status) { useMoney(weeklyChecks.uni.value) } }; window.flipDailyCheck = function(check) { let dailyChecks = State.getVar('$dailyChecks'); dailyChecks[check] = !dailyChecks[check]; }; window.isRecurringTimeMatch = function (ref) { const worldDate = State.getVar('$worldDate'); const reference = State.getVar('$recurringHoursData'); if (!(worldDate instanceof Date)) return false; const dayOfWeek = worldDate.getDay(); if (!reference[ref].days.includes(dayOfWeek)) return false; const target = new Date(worldDate); target.setHours(reference[ref].hour, reference[ref].minute, 0, 0); const diffMs = Math.abs(worldDate - target); const diffMinutes = diffMs / 1000 / 60; return diffMinutes <= reference[ref].tolerance; }; window.recurringTimeAvailable = function (ref) { const worldDate = State.getVar('$worldDate'); const reference = State.getVar('$recurringHoursData'); if (!(worldDate instanceof Date)) return false; const dayOfWeek = worldDate.getDay(); if (!reference[ref].days.includes(dayOfWeek)) return false; const target = new Date(worldDate); target.setHours(reference[ref].hour, reference[ref].minute + reference[ref].tolerance, 0, 0); const diffMs = target - worldDate; const diffMinutes = diffMs / 1000 / 60; return diffMinutes >= 0; }; window.moveHomeType = function(type) { let currentHome = State.getVar('$currentHome'); let weeklyChecks = State.getVar('$weeklyChecks'); const realEstateData = State.getVar('$realEstateData'); useMoney(realEstateData[type].price); setFlashMessage(true, "You've moved to a " + realEstateData[type].name); State.setVar('$currentHome', type); weeklyChecks.rent.value = realEstateData[type].rent; } <</script>>
<<script>> /* <script> */ const MAPPER = { 'money': { 'emoji': '💵' }, 'energy': { 'emoji': '⚡' }, 'hygiene': { 'emoji': '🚿' }, 'hunger': { 'emoji': '🍗' }, 'looks': { 'emoji': '🪞' }, 'cor': { 'emoji': '😈' }, 'corruption': { 'emoji': '😈' }, 'exposition': { 'emoji': '👙' }, 'fit': { 'emoji': '💪' }, 'int': { 'emoji': '🎓' }, 'cha': { 'emoji': '💬' }, 'expo': { 'emoji': '👙' }, 'gaming': { 'emoji': '🎮' }, 'programming': { 'emoji': '💻' }, 'cooking': { 'emoji': '🍳' }, 'makeup': { 'emoji': '💄' }, 'dancing': { 'emoji': '💃' } }; window.getTimeDiff = function (date1, date2) { const diffMs = Math.abs(date1 - date2); const totalMinutes = Math.floor(diffMs / 1000 / 60); const hours = Math.floor(totalMinutes / 60); const minutes = totalMinutes % 60; return { hours, minutes }; }; window.formatRecurringTime = function (ref) { const weekdayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; const reference = State.getVar('$recurringHoursData'); let weekdays = reference[ref].days; let hour = reference[ref].hour; let minutes = reference[ref].minute; const names = weekdays .sort((a, b) => a - b) .map(d => weekdayNames[d]); let dayString = ""; if (names.length === 1) { dayString = names[0]; } else if (names.length === 2) { dayString = `${names[0]} and ${names[1]}`; } else { const allButLast = names.slice(0, -1).join(", "); const last = names[names.length - 1]; dayString = `${allButLast} and ${last}`; } const date = new Date(); date.setHours(hour, minutes, 0); const timeString = date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit', hour12: true }); return `${dayString} at ${timeString}`; }; window.formatStartTime = function (ref) { const reference = State.getVar('$recurringHoursData'); let hour = reference[ref].hour; let minutes = reference[ref].minute; const startTime = new Date(); startTime.setHours(hour, minutes, 0); return startTime.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit', hour12: true }); }; window.getEmoji = function (ref) { return MAPPER[ref].emoji; }; window.getDailyTasks = function () { let tasks = []; const uniData = State.getVar('$uniData'); const dailyChecks = State.getVar('$dailyChecks'); const jobData = State.getVar('$jobData'); const jobHours = State.getVar('$recurringHoursData'); const pornStarData = State.getVar('$pornStarData'); const date = State.getVar('$worldDate'); if (uniData.enrolled && date.getDay() % 6 !== 0 && recurringTimeAvailable('uni')) { tasks.push('You have class today at ' + formatStartTime('uni')); } if (jobData.restaurant && jobHours.restaurant.days.includes(date.getDay()) && recurringTimeAvailable('restaurant')) { tasks.push('You have Restaurant work today at ' + formatStartTime('restaurant')); } if (jobData.dev && !dailyChecks.devWork) { tasks.push('You can still work as a Developer today'); } if (jobData.office && jobHours.office.days.includes(date.getDay()) && recurringTimeAvailable('office')) { tasks.push('You have Office work today at ' + formatStartTime('office')); } if (jobData.modelling && jobHours.modelling.days.includes(date.getDay()) && recurringTimeAvailable('modelling')) { tasks.push('You have Modelling work today at ' + formatStartTime('modelling')); } if (jobData.glory) { tasks.push('You can work in the GloryHole!'); } if (jobData.pornstar && recurringTimeAvailable('pornStudio') && pornStarData.weeklyVideos < pornStarData.maxWeeklyVideos){ const remainingVideos = pornStarData.maxWeeklyVideos - pornStarData.weeklyVideos; tasks.push(`You can still record ${remainingVideos} video(s) this week at the porn studio at ` + formatStartTime('pornStudio')); } if (jobData.stripper && jobHours.stripper.days.includes(date.getDay()) && recurringTimeAvailable('stripper')) { tasks.push('You have Stripper work today at ' + formatStartTime('stripper')); } return tasks; }; window.setFlashMessage = function (type, message) { State.setVar('$flashSuccess', type); State.setVar('$flashMessage', message); }; window.goToPassage = function () { Engine.show(); }; window.rngRoll = function (odds) { const pct = Number(odds); if (!isFinite(pct)) return false; if (pct <= 0) return false; if (pct >= 100) return true; return Math.random() * 100 < pct; } <</script>>
<<set $socialMediaStatus = { 'instagram': { 'status': false, 'followers': 0, 'totalPosts': 0, 'posts': { 'selfie': {times: 0, cap: 10}, 'full': {times: 0, cap: 20}, 'bikini': {times: 0, cap: 25}, 'thirst': {times: 0, cap: 30} } }, 'onlyfans': { 'totalPosts': 0, 'passiveIncome': 0, 'status': false, 'followers': 0, 'username': '', 'unlocked_all': false, 'posts': { 'tease': {times: 0, multiplier: 1.0, cap: 25, counters: []}, 'bikini': {times: 0, multiplier: 1.1 , cap: 30, counters: []}, 'naked': {times: 0, multiplier: 1.2, cap: 35, counters: []}, 'masturbate': {times: 0, multiplier: 1.3, cap: 40, counters: ['masturbate']}, 'dildo': {times: 0, multiplier: 1.4, cap: 45, counters: ['masturbate']}, 'dildo_anal': {times: 0, multiplier: 1.5, cap: 50, counters: ['masturbate', 'anal']}, 'blowjob': {times: 0, multiplier: 1.6, cap: 55, counters: ['oral']}, 'sex': {times: 0, multiplier: 1.7, cap: 60, counters: ['sex', 'straight']}, 'lesbian': {times: 0, multiplier: 1.8, cap: 65, counters: ['lesbian', 'sex']}, 'group': {times: 0, multiplier: 1.9, cap: 100, counters: ['sex', 'group']}, 'cumplay': {times: 0, multiplier: 2.0, cap: 100, counters: ['facial', 'swallow']}, } }, 'tinder': { 'status': false, 'followers': 0 } } >> <<script>> /* <script> */ window.joinInstagram = function() { let socials = State.getVar('$socialMediaStatus'); socials.instagram.status = true; }; window.instagramPost = function(postType) { let player = State.getVar('$player'); let socials = State.getVar('$socialMediaStatus'); let checks = State.getVar('$dailyChecks'); checks.instagramPost = true; socials.instagram.totalPosts++; switch(postType) { case 'random': break; default: socials.instagram.posts[postType].times++; gainExposition(1, socials.instagram.posts[postType].cap); break; } }; window.joinOnlyFans = function(username) { let socials = State.getVar('$socialMediaStatus'); socials.onlyfans.status = true; socials.onlyfans.username = username; }; window.onlyFansPost = function (postType) { const socials = State.getVar('$socialMediaStatus'); let player = State.getVar('$player'); const stats = socials.onlyfans; const postData = stats.posts[postType]; const baseFollowerGain = 10; const baseEarning = 100; const basePassiveEarning = 5; const followerFactor = Math.log10(stats.followers + 10); const multiplier = postData.multiplier; const earnedFollowers = Math.floor((baseFollowerGain + followerFactor * 5) * multiplier); const earnings = Math.floor((baseEarning + stats.followers * 0.02) * multiplier); const passiveEarnings = Math.floor((basePassiveEarning + stats.followers * 0.005) * multiplier); stats.followers += earnedFollowers; stats.passiveIncome += passiveEarnings; gainMoney(earnings); skipTime(2, 0, false); useEnergy(30); useHunger(30); flipDailyCheck('onlyFansPost'); gainCorruption(1, postData.cap); gainExposition(1, postData.cap); updateSexCounter(...postData.counters); return { 'earnings': earnings, 'passiveEarnings': passiveEarnings, 'followers': earnedFollowers }; }; <</script>>
<<set $sexCounters = { masturbate: 0, handjob: 0, sex: 0, oral: 0, anal: 0, straight: 0, lesbian: 0, group: 0, creampie: 0, facial: 0, swallow: 0, bodyshot: 0, }>> <<set $generalCounters = { gym : { cardio : 0, full_body: 0, dance_lessons: 0 }, gaming: 0, studied: 0, pornWatch: 0, makeupApplied: 0, }>> <<set $perks = { gooner: false, cumLover: false, sexAddict: false, oralExpert: false, analMaster: false, straightLover: false, lesbianLover: false, handjobExpert: false, bisexualLover: false, bimbo: false, gangbangPro : false }>> <<set $perksDetails = { gooner: {name: 'Gooner'}, cumLover: {name: 'Cum Lover'}, sexAddict: {name: 'Sex Addict'}, oralExpert: {name: 'Oral Expert'}, analMaster: {name: 'Anal Master'}, straightLover: {name: 'Straight Lover'}, lesbianLover: {name: 'Lesbian Lover'}, handjobExpert: {name: 'Handjob Expert'}, bisexualLover: {name: 'Bisexual Lover'}, gangbangPro : {name: 'Gangbang Pro'}, bimbo: {name: 'Bimbo'} }>> <<set $achievements = { firstSex: false, firstOral: false, firstAnal: false, firstStraight: false, firstLesbian: false, firstGroup: false, firstCreampie: false, firstFacial: false, firstSwallow: false, firstBodyshot: false }>> <<set $achievementDetail = { firstSex : { name: "First Time", description : "Experience the thrill of your first sexual encounter.", } }>> <<script>> /* <script> */ window.updateSexCounter = function(...sexActs) { let sexCounters = State.getVar('$sexCounters'); sexActs.forEach(act => { if (sexCounters[act] !== undefined) { sexCounters[act]++; } }); checkPerkUnlocks(); }; window.checkPerkUnlocks = function() { const player = State.getVar("$player"); const sexCounters = State.getVar("$sexCounters"); const perks = State.getVar("$perks"); if(sexCounters.masturbate >= 50) { perks.gooner = true; triggerPerk('gooner'); } if(sexCounters.handjob >= 50) { perks.handjobExpert = true; triggerPerk('handjobExpert'); } if(sexCounters.sex >= 50) { perks.sexAddict = true; triggerPerk('sexAddict'); } if(sexCounters.swallow >= 50) { perks.cumLover = true; triggerPerk('cumLover'); } if(sexCounters.lesbian >= 50) { perks.lesbianLover = true; triggerPerk('lesbianLover'); } if(sexCounters.straight >= 50) { perks.straightLover = true; triggerPerk('straightLover'); } if(sexCounters.oral >= 50) { perks.oralExpert = true; triggerPerk('oralExpert'); } if(sexCounters.anal >= 50) { perks.analMaster = true; triggerPerk('analMaster'); } if(sexCounters.group >= 50) { perks.gangbangPro = true; triggerPerk('gangbangPro'); } if (perks.lesbianLover && perks.straightLover) { perks.bisexualLover = true; triggerPerk('bisexualLover'); } if (player.body.lips === 'Bimbo' && player.body.breasts === 'Huge' && player.body.bottom === 'Huge') { perks.bimbo = true; triggerPerk('bimbo'); } }; window.hasPerk = function(perk) { const perks = State.getVar("$perks"); return perks[perk]; }; window.triggerPerk = function(perk) { const perksDetails = State.getVar("$perksDetails"); const path = 'perks.' + perk; triggerDialog(path, "You've unlocked a new perk!"); }; <</script>>
<<set $jobData = { 'restaurant' : false, 'dev': false, 'office': false, 'chef': false, 'streamer': false, 'modelling': false, 'glory': false, 'pornstar': false, 'stripper': false, 'prostitute': false }>> <<set $recurringHoursData = { 'uni':{ 'days': [1, 2, 3, 4, 5], 'tolerance': 30, 'hour': 9, 'minute': 0 }, 'restaurant': { 'days': [1, 2, 3, 4, 5], 'tolerance': 30, 'hour': 16, 'minute': 0 }, 'chef': { 'days': [1, 2, 3, 4, 5], 'tolerance': 30, 'hour': 16, 'minute': 0 }, 'modelling': { 'days': [2, 4, 5, 6, 0], 'tolerance': 30, 'hour': 9, 'minute': 0 }, 'office': { 'days': [1, 2, 3, 4, 5], 'tolerance': 30, 'hour': 9, 'minute': 0 }, 'pornStudio': { 'days': [0, 1, 2, 3, 4, 5, 6], 'tolerance': 30, 'hour': 10, 'minute': 0 }, 'stripper': { 'days': [0, 1, 2, 3, 4, 5, 6], 'tolerance': 30, 'hour': 18, 'minute': 0 }, 'streaming' : { 'days': [0, 1, 2, 3, 4, 5, 6], 'tolerance': 30, 'hour': 19, 'minute': 0 } }>> <<set $restaurantData = { 'timesWorked': 0, 'rank': 1, 'fame': 'none', 'work': { 'light': {times:0, fame: 'slacker', 'multiplier': 1.0, counters: []}, 'heavy': {times:0, fame: 'hardworker', 'multiplier': 1.2, counters: []}, 'chat': {times:0, fame: 'chatter', 'multiplier': 1.5, counters: []}, 'flirt': {times:0, fame: 'flirter', 'multiplier': 2.0, cap: 15, counters: []}, 'tease': {times:0, fame: 'flirter', 'multiplier': 2.3, cap: 20, counters: []}, 'blow': {times:0, fame: 'slutty', 'multiplier': 2.5, cap: 35, counters: ['oral']}, 'fuck': {times:0, fame: 'slutty', 'multiplier': 3.0, cap: 50, counters: ['sex', 'straight']} }, 'fameDetails': { 'none': {name:'None', 'description': 'No fame'}, 'slacker': {name: 'Slacker', 'description': "You're known for not putting in the effort"}, 'hardworker': {name: 'Hardworker', 'description': 'You are respected for your dedication and hard work'}, 'chatter': {name: 'Chatter', 'description': 'You are famous for your friendly conversations with customers'}, 'flirter': {name: 'Flirter', 'description': 'You are well known for your playful flirting with guests'}, 'slutty': {name: 'Slutty', 'description': 'You have a reputation for being very bold and provocative at work'} } }>> <<set $devData = { 'timesWorked': 0, 'currentProject': '', 'currentProjectProgress': 0, 'projectsCompleted': 0, 'passiveIncome': 0, 'rank': 1, 'worked': false }>> <<set $officeData = { 'rank': 1, 'timesWorked': 0, 'fame': 'none', 'work' : { 'light': {'times': 0, 'multiplier': 1.0, fame: 'slacker', counters: []}, 'heavy': {'times': 0, 'multiplier': 1.2, fame: 'hardworker', counters: []}, 'chat': {'times': 0, 'multiplier': 1.5, fame: 'chatter', counters: []}, 'flirt': {'times': 0, 'multiplier': 2.0, fame: 'flirter', counters: [], cap: 25}, 'tease': {'times': 0, 'multiplier': 2.0, fame: 'flirter', counters: [], cap: 30}, 'blow': {'times': 0, 'multiplier': 2.5, fame: 'dickSucker', counters: ['oral'], cap: 40}, 'fuck': {'times': 0, 'multiplier': 3.5, fame: 'officeMattress', counters: ['sex', 'straight'], cap: 50} }, 'fameDetails': { 'none': {name:'None', 'description': 'No fame'}, 'slacker': {name: 'Slacker', 'description': "You're known for not putting in the effort"}, 'hardworker': {name: 'Hardworker', 'description': 'You are respected for your dedication and hard work'}, 'chatter': {name: 'Chatter', 'description': 'You are famous for your friendly conversations with coworkers'}, 'flirter': {name: 'Teaser','description': 'You are well known for your playful flirting at the office'}, 'dickSucker': {name: 'Dick Sucker', 'description': 'You have a reputation for giving oral favors at work'}, 'officeMattress': {name: 'Office Mattress', 'description': 'You are notorious for sleeping with many colleagues'} } }>> <<set $gloryHoleData = { 'timesWorked': 0, 'invite': false, 'work': false, 'rank': 1, 'types': { 'hj': {'times': 0, 'modifier': 1.1, counters: ['handjob']}, 'bj': {'times': 0, 'modifier': 1.3, counters: ['oral']}, 'sex': {'times': 0, 'modifier': 1.5, counters: ['sex', 'straight']}, 'anal': {'times': 0, 'modifier': 2.0, counters: ['sex', 'anal']}, 'multiple': {'times': 0, 'modifier': 2.5, counters: ['sex', 'group']}, 'invite': {'times': 0, 'modifier': 3, counters: ['sex', 'oral']} } }>> <<set $modelData = { 'timesWorked': 0, 'rank': 1, 'path': 'none', 'porn_invite': false, 'path_completed': false, 'shoots': { 'amateur_photoshoot': {'name': 'Amateur Photoshoot', 'times': 0, 'multiplier': 1.0, cap: 20}, 'catalog_photoshoot': {'name': 'Catalog Photoshoot', 'times': 0, 'multiplier': 1.2, cap: 25}, 'amateur_runway': {'name': 'Amateur Runway', 'times': 0, 'multiplier': 1.5}, 'magazine_photoshoot': {'name': 'Magazine Photoshoot', 'times': 0, 'multiplier': 1.8}, 'international_runway': {'name': 'International Runway', 'times': 0, 'multiplier': 2.5}, 'bikini_lingerie_photoshoot': {'name': 'Bikini/Lingerie Photoshoot', 'times': 0, 'multiplier': 1.5, cap: 30}, 'erotic_photoshoot': {'name': 'Erotic Photoshoot', 'times': 0, 'multiplier': 1.8, cap: 40}, 'adult_photoshoot': {'name': 'Adult Photoshoot', 'times': 0, 'multiplier': 2.5, cap: 50} } }>> <<set $pornStarData = { 'timesWorked': 0, 'maxWeeklyVideos': 2, 'weeklyVideos': 0, 'studioUnlocked': false, 'rank': 1, 'passiveIncome': 0, 'scenes': { 'solo': {'times': 0, 'modifier': 1.0, counters: ['masturbate']}, 'straight': {'times': 0, 'modifier': 1.1, counters: ['sex', 'straight']}, 'anal': {'times': 0, 'modifier': 1.2, counters: ['sex', 'anal']}, 'lesbian': {'times': 0, 'modifier': 1.3, counters: ['sex', 'lesbian']}, 'group': {'times': 0, 'modifier': 1.4, counters: ['sex', 'group']}, 'gangbang': {'times': 0, 'modifier': 1.5, counters: ['sex', 'anal', 'group', 'bodyshot']}, 'bukkake': {'times': 0, 'modifier': 1.6, counters: ['sex','oral', 'swallow', 'group']}, 'piss': {'times': 0, 'modifier': 1.7, counters: ['sex', 'group', 'oral', 'anal', 'bodyshot', 'swallow']} } }>> <<set $chefData = { 'timesWorked': 0, 'rank': 1, 'currentWorkPlace': 'cheap', 'work': { 'light': { times: 0, 'multiplier': 1.0 }, 'heavy': { times: 0, 'multiplier': 1.2 }, 'improve_cook': { times: 0, 'multiplier': 1.0 } }, }>> <<set $stripperData = { timesWorked: 0, rank: 0, work: { 'dance': {times: 0, multiplier: 1.0, counters: [], cap: 25 }, 'nakedDance': {times: 0, multiplier: 1.0 , counters: [], cap: 30 }, 'privateDance': {times: 0, multiplier: 1.5, counters: [], cap: 35 }, 'privateSex': {times: 0, multiplier: 2.0, counters: ['sex', 'straight'], cap: 50 }, 'privateParty': {times: 0, multiplier: 2.5, counters: ['sex', 'straight' , 'group', 'anal'], cap: 90 } } }>> <<set $streamerData = { timesStreamed: 0, rank: 1, followers: 0, passiveIncome: 0, streamTypes: { 'casual': {times: 0, multiplier: 1.2 }, 'improve_gaming': {times: 0, multiplier: 1.0 }, 'just_chatting': {times: 0, multiplier: 1.5 }, } }>> <<set $prostituteData = { timesWorked: 0, experienced: false, rank: 1, work: { 'handjob': {times: 0, multiplier: 1.1, counters: ['handjob'], cap: 40}, 'blowjob': {times: 0, multiplier: 1.3, counters: ['blowjob'], cap: 45}, 'sex': {times: 0, multiplier: 1.5, counters: ['straight', 'sex'], cap: 50 }, 'lesbian': {times: 0, multiplier: 1.5, counters: ['sex', 'lesbian'], cap: 50 }, 'group': {times: 0, multiplier: 2.0, counters: ['sex', 'anal', 'group'], cap: 60 }, } }>> <<script>> /* <script> */ window.restaurantWork = function(workType) { const restaurantData = State.getVar('$restaurantData'); const workConfig = restaurantData.work[workType]; let basePay = Math.ceil(100 * restaurantData.rank * workConfig.multiplier); let tips = Math.ceil(1 * restaurantData.rank * workConfig.multiplier); let energyUsed = (workType === 'heavy') ? 30 : 15; restaurantData.timesWorked++; if (restaurantData.work[workType]) { restaurantData.work[workType].times++; } if (restaurantData.timesWorked % 10 === 0) { restaurantData.rank++; } updateSexCounter(...workConfig.counters); if (workType === 'flirt' || workType === 'tease' || workType === 'blow' || workType === 'fuck') { gainExposition(1, workConfig.cap); gainCorruption(1, workConfig.cap); } gainMoney(basePay + tips); useEnergy(energyUsed); useHunger(30); useHygiene(30); goToTime(20, 0, false); if (restaurantData.timesWorked >= 10) { const maxType = Object.entries(restaurantData.work) .reduce((max, [type, data]) => data.times > max.times ? { type, times: data.times } : max, { type: 'light', times: restaurantData.work.light.times }).type; restaurantData.fame = restaurantData.work[maxType].fame; } return { basePay: basePay, tips: tips, } }; window.devWork = function() { let devData = State.getVar('$devData'); let player = State.getVar('$player'); let currentProject = devData.currentProject; const baseProgress = { 'easy': 50, 'medium': 35, 'hard': 20, }; const baseReward = { 'easy': { 'cash': 400, 'passive': 0 }, 'medium': { 'cash': 800, 'passive': 30 }, 'hard': { 'cash': 1500, 'passive': 50 }, }; devData.currentProjectProgress += baseProgress[currentProject]; devData.timesWorked++; if (devData.timesWorked % 3 === 0) { learnSkill('programming'); } if (devData.currentProjectProgress >= 100) { setFlashMessage(true, 'You completed the Project!'); devData.projectsCompleted++; gainMoney(baseReward[currentProject]['cash']); devData.passiveIncome += baseReward[currentProject]['passive']; devData.currentProject = ''; devData.currentProjectProgress = 0; showToast('Project Completed'); } skipTime(4, 0, false); useEnergy(30); useHunger(20); useHygiene(20); flipDailyCheck('devWork'); }; window.ghWork = function(action, finalStep) { let ghData = State.getVar('$gloryHoleData'); const timesWorked = ghData.types[action].times; const actionBonus = Math.min(1 + timesWorked * 0.02, 1.5); const rankBonus = 1 + (ghData.rank - 1) * 0.1; let basePay = 100 * ghData.types[action].modifier * rankBonus * actionBonus; basePay = Math.round(basePay); ghData.timesWorked++; ghData.types[action].timesWorked++; setFlashMessage(true, "You've made $" + basePay); if (ghData.timesWorked >= 5 && !ghData.work) { ghData.invite = true; } if (finalStep == 'swallow') { updateSexCounter('swallow'); } if (finalStep == 'facial') { getCummed('face'); updateSexCounter('bodyshot'); } if (finalStep == 'inside') { getCummed('inside'); updateSexCounter('creampie'); } if (finalStep == 'outside') { getCummed('body'); updateSexCounter('bodyshot'); } updateSexCounter(...ghData.types[action].counters); gainMoney(basePay); skipTime(1, 30, false); useEnergy(30); useHunger(30); useHygiene(40); return { basePay : basePay }; }; window.modelWork = function(type) { let modelData = State.getVar('$modelData'); calculateLooks(); let player = State.getVar('$player'); let basePay = 120; let looksMod = player.stats.looks * 1.2; let shootMod = modelData.shoots[type].multiplier; let total = Math.ceil((basePay + looksMod) * shootMod); gainMoney(total); if (type =='amateur_photoshoot' || type == 'catalog_photoshoot' || type === 'bikini_lingerie_photoshoot' || type === 'erotic_photoshoot' || type === 'adult_photoshoot') { gainExposition(1, modelData.shoots[type].cap); } modelData.timesWorked++; modelData.shoots[type].times++; goToTime(16, 0, false); useEnergy(30); useHunger(30); useHygiene(30); if (modelData.timesWorked >= 7 && player.stats.looks >= 40 && modelData.path == 'none') { modelData.path = 'choose'; } if (modelData.shoots.adult_photoshoot.times >= 5) { modelData.porn_invite = true; } return total; }; window.officeWork = function(workType) { let officeData = State.getVar('$officeData'); let player = State.getVar('$player'); let basePay = 200 * officeData.rank * officeData.work[workType].multiplier; let energyUsed = 15; if (workType === 'heavy' || workType === 'fuck' || workType === 'blow') { energyUsed = 30; } officeData.work[workType].times++; officeData.timesWorked++; if (officeData.timesWorked % 10 === 0) { officeData.rank++; } if (workType === 'flirt' || workType === 'tease' || workType === 'blow' || workType === 'fuck') { gainExposition(1, officeData.work[workType].cap); gainCorruption(1, officeData.work[workType].cap); } if (officeData.timesWorked >= 10) { const maxType = Object.entries(officeData.work) .reduce((max, [type, data]) => data.times > max.times ? { type, times: data.times } : max, { type: 'light', times: officeData.work.light.times }).type; officeData.fame = officeData.work[maxType].fame; } updateSexCounter(...officeData.work[workType].counters); gainMoney(basePay); useEnergy(energyUsed); useHunger(30); useHygiene(30); goToTime(15, 30, false); return { pay: basePay }; }; window.chefWork = function(workType) { let chefData = State.getVar('$chefData'); let player = State.getVar('$player'); let placeMultiplier = 1; if (chefData.currentWorkPlace === 'medium') { placeMultiplier = 1.5; } else if (chefData.currentWorkPlace === 'fancy') { placeMultiplier = 2.2; } let basePay = 50 * chefData.rank * chefData.work[workType].multiplier * placeMultiplier; let energyUsed = 20; chefData.work[workType].times++; chefData.timesWorked++; if (chefData.timesWorked % 10 === 0) { chefData.rank++; } if (workType === 'improve_cook') { learnSkill('cooking'); } if (workType === 'heavy') { energyUsed = 30; } if (chefData.timesWorked >= 15 && chefData.currentWorkPlace === 'cheap' && player.skills.cooking >= 30) { chefData.currentWorkPlace = 'medium'; triggerDialog('chef.promotion_1', 'Promotion!'); } if (chefData.timesWorked >= 30 && chefData.currentWorkPlace === 'medium' && player.skills.cooking >= 60) { chefData.currentWorkPlace = 'fancy'; triggerDialog('chef.promotion_2', 'Promotion!'); } useEnergy(energyUsed); useHunger(20); useHygiene(50); goToTime(17, 0, false); gainMoney(basePay); return basePay; }; window.pornStarWork = function(sceneType) { let pornStarData = State.getVar('$pornStarData'); let player = State.getVar('$player'); let basePay = 150; let rankMod = 1 + (pornStarData.rank - 1) * 0.1; let sceneMod = pornStarData.scenes[sceneType].modifier; let timesMod = 1 + pornStarData.scenes[sceneType].times * 0.02; timesMod = Math.min(timesMod, 2.0); let total = Math.ceil(basePay * rankMod * sceneMod * timesMod); let passiveIncome = Math.floor(total * 0.1); pornStarData.passiveIncome += passiveIncome; updateSexCounter(...pornStarData.scenes[sceneType].counters); pornStarData.weeklyVideos++; pornStarData.timesWorked++; gainMoney(total); useEnergy(30); useHunger(50); goToTime(17, 0, false); useHygiene(80); gainCorruption(1); gainExposition(1); return { total: total, passiveIncome: passiveIncome }; }; window.stripperWork = function(workType) { let stripperData = State.getVar('$stripperData'); let player = State.getVar('$player'); let basePay = 500; let rankMod = 1 + (stripperData.rank - 1) * 0.1; let workMod = stripperData.work[workType].multiplier; let timesMod = 1 + stripperData.work[workType].times * 0.02; timesMod = Math.min(timesMod, 2.0); let total = Math.ceil(basePay * rankMod * workMod * timesMod); let tips = Math.floor(total * (0.1 + Math.random() * 0.4)); stripperData.timesWorked++; stripperData.work[workType].times++; if (stripperData.timesWorked % 10 === 0) { stripperData.rank++; } updateSexCounter(...stripperData.work[workType].counters); gainExposition(1, stripperData.work[workType].cap); gainCorruption(1, stripperData.work[workType].cap); if(workType === 'privateParty') { getCummed('inside'); getCummed('body'); getCummed('face'); } gainMoney(total + tips); useEnergy(30); useHunger(30); goToTime(23, 0, false, true); useHygiene(50); return { total: total, tips: tips }; }; window.streamerWork = function(streamType){ let streamerData = State.getVar('$streamerData'); let player = State.getVar('$player'); const playerSkill = player.skills.gaming; const playerCharisma = player.stats.charisma; let basePay = 200; let rankMod = 1 + (streamerData.rank - 1) * 0.1; let streamMod = streamerData.streamTypes[streamType].multiplier; let skillMod = 1 + (playerSkill || 0) * 0.01; let charismaMod = 1 + (playerCharisma || 0) * 0.01; let followersMod = 1 + Math.min(Math.floor((streamerData.followers || 0) / 100) * 0.01, 1.0); let total = Math.ceil(basePay * rankMod * streamMod * skillMod * charismaMod * followersMod); let followersGain = 10 + Math.floor((playerCharisma || 0)) + Math.floor((playerSkill || 0) / 10) + random(0, 10); streamerData.followers += followersGain; streamerData.streamTypes[streamType].times++; streamerData.timesStreamed++; if(streamType === 'improve_gaming'){ learnSkill('gaming'); } gainMoney(total); useEnergy(30); useHunger(30); useHygiene(10); goToTime(2, 0, false, true); return { total: total, followersGain: followersGain, totalFollowers: streamerData.followers }; }; window.prostituteWork = function (workType) { let prostituteData = State.getVar('$prostituteData'); let player = State.getVar('$player'); let jobData = State.getVar('$jobData'); let basePay = 300; let rankMod = 1 + (prostituteData.rank - 1) * 0.1; let workMod = prostituteData.work[workType].multiplier; let total = Math.ceil(basePay * rankMod * workMod); gainMoney(total); prostituteData.timesWorked++; if (prostituteData.timesWorked === 4) { prostituteData.experienced = true; jobData.prostitute = true; } prostituteData.work[workType].times++; if (prostituteData.timesWorked % 10 === 0) { prostituteData.rank++; } updateSexCounter(...prostituteData.work[workType].counters); gainExposition(1, prostituteData.work[workType].cap); gainCorruption(1, prostituteData.work[workType].cap); useEnergy(30); useHunger(30); useHygiene(30); skipTime(2, 0, false); if (workType === 'blowjob') { getCummed('face'); } if (workType === 'sex') { getCummed('inside'); } if (workType === 'group') { getCummed('inside'); getCummed('body'); getCummed('face'); } return { pay : total } }; window.calculatePassiveIncome = function() { let total = 0; let devData = State.getVar('$devData'); let socialData = State.getVar('$socialMediaStatus'); let pornStarData = State.getVar('$pornStarData'); total += devData.passiveIncome + socialData.onlyfans.passiveIncome + pornStarData.passiveIncome; gainMoney(total); return total; }; window.hasJob = function() { let jobData = State.getVar('$jobData'); return Object.values(jobData).some(status => status === true); }; <</script>>
<<script>> /* <script> */ window.isWearingClothesType = function(slot, type) { let player = State.getVar('$player'); return player.outfit[slot] && player.outfit[slot].includes(type); } <</script>>
<p class="text-center"> You are in a cheap restaurant. <<if !$jobData.restaurant>> You can see they're hiring for a Waitress, come at <<= formatRecurringTime('restaurant')>> to apply! <<else>> You work here as a waitress. <</if>> <<if !$jobData.chef>> You can see they're hiring for a Cook, come at <<= formatRecurringTime('chef')>> to apply! <</if>> <<if $jobData.chef && $chefData.currentWorkPlace === 'cheap'>> You work here as a cook. <</if>> </p> <<if $justEat>> <p class="text-center">You ate something and feel less hungry</p> <<bodyMedia 'actions.mundane.eat'>> <<set $justEat = false>> <<else>> <<image "src/locations/cheap_restaurant.jpg">> <</if>> <<flash>> <div class="link-container"> <<if hasMoney(20)>> [[Order Food 💵20|Restaurant][eat()]] <<else>> <<set _reqs = {money: 20}>> <<linkDisabled _reqs>> Not enough money to order food! <</linkDisabled>> <</if>> <<if $jobData.restaurant && isRecurringTimeMatch('restaurant')>> <<if hasEnergy(30) && hasHunger(20) && hasHygiene(30)>> [[Work as a Waitress|RestaurantWorkPrep][$restaurantWork = 'waitress']] <<else>> <<set _reqs = {'energy':30, 'hunger': 20, 'hygiene': 30}>> <<linkDisabled _reqs>> You need to check yourself before going to work <</linkDisabled>> <</if>> <</if>> <<if !$jobData.restaurant && isRecurringTimeMatch('restaurant')>> [[Apply for a Job as a Waitress|Restaurant Job][$restaurantJob = 'waitress']] <</if>> <<if $jobData.chef && isRecurringTimeMatch('chef') && $chefData.currentWorkPlace === 'cheap'>> <<if hasEnergy(30) && hasHunger(20) && hasHygiene(30)>> [[Work as a Cook|RestaurantWorkPrep][$restaurantWork = 'chef']] <<else>> <<set _reqs = {'energy':30, 'hunger': 20, 'hygiene': 30}>> <<linkDisabled _reqs>> You need to check yourself before going to work <</linkDisabled>> <</if>> <</if>> <<if !$jobData.chef && isRecurringTimeMatch('chef')>> [[Apply for a Job as a Cook|Restaurant Job][$restaurantJob = 'chef']] <</if>> [[Go Back|Outside][skipTime(0,5)]] </div>
<p class="text-center">You are in a average looking restaurant.</p> <<if $justEat>> <p class="text-center">You ate something and feel less hungry</p> <<bodyMedia 'actions.mundane.eat'>> <<set $justEat = false>> <<else>> <<image "src/locations/medium_restaurant.jpg">> <</if>> <<if $jobData.chef && $chefData.currentWorkPlace === 'medium'>> <p class="text-center">You work here as a cook.</p> <</if>> <div class="link-container"> <<if hasMoney(40)>> [[Order Food 💵40|MediumRestaurant][eat()]] <<else>> <<set _reqs = {money: 40}>> <<linkDisabled _reqs>> Not enough money to order food! <</linkDisabled>> <</if>> <<if $jobData.chef && isRecurringTimeMatch('chef') && $chefData.currentWorkPlace === 'medium'>> [[Work as a Cook|RestaurantWorkPrep][$restaurantWork = 'chef']] <</if>> [[Go Back|District][skipTime(0,5)]] </div>
<p class="text-center">You are in a fancy looking restaurant.</p> <p class="text-center">You are in a average looking restaurant.</p> <<if $justEat>> <p class="text-center">You ate something and feel less hungry</p> <<bodyMedia 'actions.mundane.eat'>> <<set $justEat = false>> <<else>> <<image "src/locations/fancy_restaurant.jpg">> <</if>> <<if $jobData.chef && $chefData.currentWorkPlace === 'fancy'>> <p class="text-center">You work here as a chef.</p> <</if>> <div class="link-container"> <<if hasMoney(100)>> [[Order Food 💵100|FancyRestaurant][eat()]] <<else>> <<set _reqs = {money: 100}>> <<linkDisabled _reqs>> Not enough money to order food! <</linkDisabled>> <</if>> <<if $jobData.chef && isRecurringTimeMatch('chef') && $chefData.currentWorkPlace === 'fancy'>> [[Work as a Chef|RestaurantWorkPrep][$restaurantWork = 'chef']] <</if>> [[Go Back|Business District][skipTime(0,5)]] </div>
<p class="text-center">How do you plan on working today?</p> <<if $restaurantWork == 'waitress'>> <p class="text-center">You are working as a Waitress</p> <<if $restaurantData.fame === 'soon'>> <<set _fameMedia = 'actions.work.restaurant.waitress.fame.' + $restaurantData.fame>> <<bodyMedia _fameMedia>> <p class="text-center"><<= $restaurantData.fameDetails[$restaurantData.fame].description>></p> <</if>> <div class="link-container"> [[Light Work|Restaurant Work][$restaurantWorkType = 'light']] [[Heavy Work|Restaurant Work][$restaurantWorkType = 'heavy']] <<if hasStat('charisma', 5)>> [[Chat With Customers|Restaurant Work][$restaurantWorkType = 'chat']] <<else>> <<set _reqs = {'cha': 5}>> <<linkDisabled _reqs>> You're not charismatic enough to charm the customers <</linkDisabled>> <</if>> <<if hasCorruption(5)>> [[Flirt With Customers|Restaurant Work][$restaurantWorkType = 'flirt']] <<else>> <<set _reqs = {'cor': 5}>> <<linkDisabled _reqs>> You're not corrupted enough to flirt with customers <</linkDisabled>> <</if>> <<if hasCorruption(15)>> [[Tease Customers|Restaurant Work][$restaurantWorkType = 'tease']] <<else>> <<set _reqs = {'cor': 15}>> <<linkDisabled _reqs>> You're not corrupted enough to tease customers <</linkDisabled>> <</if>> <<if hasCorruption(30)>> [[Blow Customers|Restaurant Work][$restaurantWorkType = 'blow']] <<else>> <<set _reqs = {'cor': 30}>> <<linkDisabled _reqs>> You're not corrupted enough to blow customers <</linkDisabled>> <</if>> <<if hasCorruption(40)>> [[Fuck Customers|Restaurant Work][$restaurantWorkType = 'fuck']] <<else>> <<set _reqs = {'cor': 40}>> <<linkDisabled _reqs>> You're not corrupted enough to fuck customers <</linkDisabled>> <</if>> <<if $chefData.currentWorkPlace == 'cheap'>> [[Go Back|Restaurant]] <</if>> <<if $chefData.currentWorkPlace == 'medium'>> [[Go Back|MediumRestaurant]] <</if>> </div> <</if>> <<if $restaurantWork == 'chef'>> <p class="text-center">You are working as a Cook</p> <div class="link-container"> [[Light Work|Restaurant Work][$restaurantWorkType = 'light']] [[Heavy Work|Restaurant Work][$restaurantWorkType = 'heavy']] [[Improve Cooking|Restaurant Work][$restaurantWorkType = 'improve_cook']] [[Go Back|Restaurant]] </div> <</if>>
<p class="text-center"> <<if $restaurantJob == 'waitress'>> <<set $jobData.restaurant = true>> You applied for a job as a Waitress, your working hours are <<= formatRecurringTime('restaurant')>>. <<else>> <<set $jobData.chef = true>> You applied for a job as a Cook, your working hours are <<= formatRecurringTime('chef')>>. <</if>> </p> <div class="link-container"> [[Go Back|Restaurant]] </div>
<<if $restaurantWork == 'waitress'>> <<run _restaurantResult = restaurantWork($restaurantWorkType)>> <<switch $restaurantWorkType>> <<case 'light'>> <p class="text-center">You worked a light shift for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.light'>> <<case 'heavy'>> <p class="text-center">You worked a heavy shift for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.heavy'>> <<case 'chat'>> <p class="text-center">You worked on chatting with customers for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.chat'>> <<case 'tease'>> <p class="text-center">You worked on teasing customers for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.tease'>> <<case 'blow'>> <p class="text-center">You worked on blowing customers for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.blow'>> <<case 'flirt'>> <p class="text-center">You worked on flirting with customers for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.flirt'>> <<case 'fuck'>> <p class="text-center">You worked on fucking customers for a couple hours and made:</p> <<bodyMedia 'actions.work.restaurant.waitress.fuck'>> <</switch>> <<successMessage>> <p class=""><strong>Base Pay</strong>: $ _restaurantResult.basePay</p> <p class=""><strong>Tips</strong>: $ _restaurantResult.tips</p> <</successMessage>> <div class="link-container"> [[Go Back|Restaurant]] </div> <</if>> <<if $restaurantWork == 'chef'>> <<set _chefPay = chefWork($restaurantWorkType)>> <p class="text-center">You worked for a couple hours and made:</p> <<successMessage>> <p class=""><strong>Pay</strong>: $ _chefPay</p> <</successMessage>> <<if $chefData.currentWorkPlace === 'cheap'>> <<bodyMedia 'actions.work.restaurant.chef.cheap'>> <div class="link-container"> [[Go Back|Restaurant]] </div> <</if>> <<if $chefData.currentWorkPlace === 'medium'>> <<bodyMedia 'actions.work.restaurant.chef.medium'>> <div class="link-container"> [[Go Back|MediumRestaurant]] </div> <</if>> <<if $chefData.currentWorkPlace === 'fancy'>> <<bodyMedia 'actions.work.restaurant.chef.fancy'>> <div class="link-container"> [[Go Back|FancyRestaurant]] </div> <</if>> <</if>>
<p class="text-center">You're in Uptown!</p> <<image "src/locations/uptown.jpg">> <div class="link-container"> <<if isBusinessOpen([1,2,3,4,5], 8, 21)>> [[University|University][skipTime(0,5)]] <<else>> <<linkDisabled>> University it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Cheap Diner|Restaurant][skipTime(0,5)]] <<else>> <<linkDisabled>> Restaurant it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Local Shops|Local Shops][skipTime(0,5)]] <<else>> <<linkDisabled>> Local Shops are closed <</linkDisabled>> <</if>> [[Downtown|District][skipTime(0,5)]] <<link "$realEstateData[$currentHome].name (Home)">> <<run skipTime(0,5)>> <<goto Home>> <</link>> </div>
<p class="text-center">You're in Downtown.</p> <<image "src/locations/downtown.jpg">> <div class="link-container"> <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Shopping District|Shops][skipTime(0,5)]] <<else>> <<linkDisabled>> Shopping District it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Business District|Business District][skipTime(0,5)]] <<else>> <<linkDisabled>> Business District it's closed <</linkDisabled>> <</if>> [[Shady District|Shady District][skipTime(0,5)]] <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Restaurant|MediumRestaurant][skipTime(0,5)]] <<else>> <<linkDisabled>> Restaurant it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 15, 2)>> [[Bar|Bar][skipTime(0,5)]] <<else>> <<linkDisabled>> Bar it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 8, 21)>> [[Gym|Gym][skipTime(0,5)]] <<else>> <<linkDisabled>> Gym it's closed <</linkDisabled>> <</if>> [[Uptown|Outside][skipTime(0,5)]] </div>
<p class="text-center">This is a Shady district.</p> <<image "src/locations/shady_district.jpg">> <div class="link-container"> <<if isBusinessOpen([0,1,2,3,4,5,6], 9, 21)>> [[Strip Club|StripClub][skipTime(0,5)]] <<else>> <<linkDisabled>> Strip Club it's closed <</linkDisabled>> <</if>> <<if $pornStarData.studioUnlocked>> <<if isBusinessOpen([0,1,2,3,4,5,6], 9, 21)>> [[Porn Studio|PornStudio][skipTime(0,5)]] <<else>> <<linkDisabled>> Porn Studio it's closed <</linkDisabled>> <</if>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 12, 20)>> [[Tattoo Shop|TattooParlor][skipTime(0,5)]] <<else>> <<linkDisabled>> Tattoo Shop it's closed <</linkDisabled>> <</if>> <<if isBusinessOpen([0,1,2,3,4,5,6], 12, 0)>> [[Sex Shop|Sex Shop][skipTime(0,5)]] <<else>> <<linkDisabled>> Sex Shop it's closed <</linkDisabled>> <</if>> <<if $jobData.prostitute && !isWearingClothesType('outfit', 'prostitute')>> <<linkDisabled _reqs>> You need to be wearing a "Prostitute Dress" to work as a prostitute. <</linkDisabled>> <</if>> <<if isWearingClothesType('outfit', 'prostitute')>> <<if hasEnergy(30) && hasHunger(30) && hasHygiene(10)>> <<if !$jobData.prostitute>> [[Attempt to Work as a Prostitute|ProstitutePrep]] <<else>> [[Work as a Prostitute|ProstitutePrep]] <</if>> <<else>> <<set _reqs = { energy:30, hunger:30, hygiene:10 }>> <<linkDisabled _reqs>> You don't meet the requirements to work as a prostitute. <</linkDisabled>> <</if>> <</if>> [[Downtown|District][skipTime(0,5)]] </div>
<p class="text-center">Here's the shopping district</p> <<image "src/locations/shopping_strip.jpg">> <div class="link-container"> [[Clothing Shop|Clothing Shop][skipTime(0,5)]] [[Eletronics Shop|Eletronics Shop][skipTime(0,5)]] [[Real State|RealState][skipTime(0,5)]] [[Downtown|District][skipTime(0,5)]] </div>
<p class="text-center">You are in the Business District.</p> <<image "src/locations/business_district.jpg">> <div class="link-container"> [[Office|Office][skipTime(0,5)]] [[Modelling Agency|Modelling][skipTime(0,5)]] [[Beauty Clinic|BeautyClinic][skipTime(0,5)]] [[Fancy Restaurant|FancyRestaurant][skipTime(0,5)]] [[Downtown|District][skipTime(0,5)]] </div>
<p class="text-center">Here you can find some local shops:</p> <<image "src/locations/local_stores.jpg">> <div class="link-container"> [[Market|Market][skipTime(0,5)]] [[Uptown|Outside][skipTime(0,5)]] </div>
<p class="text-center">Here's your home:</p> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/living_room.jpg'>> <<image _homeMedia>> <div class="link-container"> [[Go to your Bedroom|Bedroom]] <<if $player.inventory.computer>> [[Computer|Computer]] <<else>> <<linkDisabled>>You don't own a computer yet<</linkDisabled>> <</if>> [[Kitchen|Kitchen]] [[Living Room|LivingRoom]] [[Bathroom|Bathroom]] <<if !$player.status.naked && (!$player.status.underwear || $player.outfit.outfit)>> [[Outside|Outside][skipTime(0,5)]] <<else>> <<linkDisabled>> You can't leave your house naked <</linkDisabled>> <</if>> </div>
<p class="text-center">You're lying in your bed</p> <<if $justSlept>> <<set $justSlept = false>> <<bodyMedia 'actions.mundane.sleep'>> <<successMessage>> <p>You've slept and woke up feeling well rested</p> <<set $passive = calculatePassiveIncome()>> <<if $passive > 0>> <p><strong>Passive Income:</strong>$ $passive</p> <</if>> <</successMessage>> <<else>> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/bedroom.jpg'>> <<image _homeMedia>> <</if>> <<if $forceDayOver>> <<run setFlashMessage(false, "It's too late!")>> <<flash>> <<set $forceDayOver = false>> <</if>> <div class="link-container"> [[Sleep|Bedroom][sleep();$justSlept = true]] [[Wardrobe|Wardrobe]] <<if checkTooLate()>> <<linkDisabled>> It's too late to go outside <</linkDisabled>> <<else>> [[Go Back|Home]] <</if>> </div>
<p class="text-center">You're on your computer.</p> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/computer.jpg'>> <<image _homeMedia>> <div class="link-container"> [[Learn a Skill|ComputerStudy]] [[Work|ComputerJobs]] <<if !$dailyChecks.videoGames>> [[Play Games|Video Games]] <<else>> <<linkDisabled>> You already played video games today <</linkDisabled>> <</if>> <<if !$dailyChecks.watchedPorn>> [[Watch Porn|Porn]] <<else>> <<linkDisabled>> You already watched porn today <</linkDisabled>> <</if>> <<if !$jobData.streamer>> <<if hasSkill('gaming', 7) && $player.inventory.webcam>> [[Open Gaming Stream Account|Computer][$jobData.streamer = true]] <<else>> <<set _reqs = {'gaming': 7}>> <<linkDisabled _reqs>> You don't have enough gaming skills or a Webcam to start a stream <</linkDisabled>> <</if>> <<else>> <<if isRecurringTimeMatch('streaming')>> <<if hasEnergy(30) && hasHunger(30)>> [[Start Streaming|StreamingPrep]] <<else>> <<set _reqs = {'energy': 30, 'hunger': 30}>> <<linkDisabled _reqs>> You don't have enough energy or hunger to stream <</linkDisabled>> <</if>> <<else>> <<linkDisabled>> Stream hours are <<= formatRecurringTime('streaming')>> <</linkDisabled>> <</if>> <</if>> <<if hasCorruption(15) && hasExposition(15)>> <<if $socialMediaStatus.onlyfans.status>> [[Manage OnlyFans Account|OnlyFans]] <<else>> [[Open OnlyFans Account|OnlyFans]] <</if>> <<else>> <<set _reqs = {'cor': 15, 'expo': 15}>> <<linkDisabled _reqs>> You don't feel corrupted and inhibited enough to open an OnlyFans Account <</linkDisabled>> <</if>> [[Go Back|Home]] </div>
<p class="text-center">You are in the Kitchen, you can make something to eat or practice cooking skills</p> <<if $justEat>> <p class="text-center">You ate something and feel less hungry</p> <<bodyMedia 'actions.mundane.eat'>> <<set $justEat = false>> <<else>> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/kitchen.jpg'>> <<image _homeMedia>> <</if>> <p class="text-center">You have $player.inventory.food Food available</p> <div class="link-container"> <<if $player.inventory.food > 0>> [[Eat Something|Kitchen][eat(); $player.inventory.food--;]] <<if !$dailyChecks.practiceCooking>> [[Improve your cooking skills|PracticeCooking]] <<else>> <<linkDisabled>> You already practiced your Cooking skills today <</linkDisabled>> <</if>> <<else>> <<linkDisabled>> You have no food <</linkDisabled>> <</if>> [[Go Back|Home]] </div>
<p class="text-center">You're practicing your cooking skills!</p> <<bodyMedia 'actions.mundane.cooking'>> <<run practiceCooking()>> <<set $player.inventory.food -= 1>> <div class="link-container"> [[Go Back|Kitchen]] </div>
<p class="text-center">You're in the bathroom!</p> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/bathroom.jpg'>> <<image _homeMedia>> <div class="link-container"> [[Shower|Shower]] [[Add Make-Up|MakeUp]] [[Look In the Mirror|Mirror]] [[Go Back|Home]] </div>
<<if !$masturbate>> <p class="text-center">You're taking a bath</p> <<bodyMedia 'actions.shower'>> <<run shower()>> <<else>> <p class="text-center">You're mastubarting while taking a bath</p> <<bodyMedia 'actions.sex.masturbate.shower'>> <<run updateSexCounter('masturbate')>> <</if>> <div class="link-container"> <<if $masturbate>> <<set $masturbate = false>> [[Go Back|Bathroom]] <<else>> <<if hasCorruption(5) && !$masturbate>> [[Masturbate while bathing|Shower][$masturbate = true]] <<else>> <<set _reqs = {'cor': 5}>> <<linkDisabled _reqs>> You don't feel horny enough to masturbate <</linkDisabled>> <</if>> [[Go Back|Bathroom]] <</if>> </div>
<p class="text-center">Here's you!</p> <div class="grid grid-cols-3 gap-5"> <div class="flex items-center justify-center flex-col gap-2"> <p class="text-center"> You have <<=$hairStyles[$player.body.hair].name>> hair </p> <<image $hairStyles[$player.body.hair].asset>> </div> <div class="flex items-center justify-center flex-col gap-2"> <<set _breastsTypes = handleBodyData('top')>> <p class="text-center"><<= _breastsTypes.desc>></p> <<image _breastsTypes.img>> </div> <div class="flex items-center justify-center flex-col gap-2"> <<set _bottomTypes = handleBodyData('bottom')>> <p class="text-center"><<=_bottomTypes.desc>></p> <<image _bottomTypes.img>> </div> <div class="flex items-center justify-center flex-col gap-2"> <<set _faceTypes = handleBodyData('face')>> <p class="text-center"><<=_faceTypes.desc>></p> <<image _faceTypes.img>> </div> <div class="flex items-center justify-center flex-col gap-2"> <<set _lipsTypes = handleBodyData('lips')>> <p class="text-center"><<=_lipsTypes.desc>></p> <<image _lipsTypes.img>> </div> <div class="flex items-center justify-center flex-col gap-2"></div> <<if hasTattoos()>> <<set _tattooAreas = [ {area: 'wrists', label: 'Wrist'}, {area: 'ankles', label: 'Ankle'}, {area: 'arms', label: 'Arm'}, {area: 'back', label: 'Back'}, {area: 'chest', label: 'Chest'}, {area: 'legs', label: 'Leg'}, {area: 'butt', label: 'Butt'}, {area: 'neck', label: 'Neck'}, {area: 'face', label: 'Face'} ]>> <<for _t range _tattooAreas>> <<if $player.tattoos[_t.area]>> <div class="flex items-center justify-center flex-col gap-2"> <p class="text-center"><<=_t.label>></p> <<media $player.tattoos[_t.area]>> </div> <</if>> <</for>> <</if>> </div> <div class="link-container"> [[Change Portrait|ChangePortrait]] [[Go Back|Bathroom]] </div>
<p class="text-center">You're laying on the couch.</p> <<set _homeMedia = 'src/locations/home/' + $currentHome + '/living_room.jpg'>> <<image _homeMedia>> <<flash>> <<set _returnTo = passage()>> <div class="link-container"> [[Nap on the Couch|LivingRoom Nap][$returnTo = _returnTo]] [[Go Back|Home]] </div>
<<run gainEnergy(10)>> <<run setFlashMessage(true, "You took a nap")>> <<run skipTime(0, 30)>> <<goto $returnTo>>
<p class="text-center">Here's what you can learn on your computer:</p> <div class="link-container"> <<if !$dailyChecks.computerLearnSkill>> <<if hasEnergy(30) && hasHunger(20) >> [[Learn Programming|Learn][$skillToLearn = 'programming']] <<else>> <<set _reqs = {'energy': 30, 'hunger': 20}>> <<linkDisabled _reqs>> You are too tired or hungry to learn right now <</linkDisabled>> <</if>> <<else>> <<linkDisabled>> You already studied today <</linkDisabled>> <</if>> [[Go Back|Computer]] </div>
<p class="text-center">Which makeup are you planning on? You can also practice your skills here, it will use a makeup unit.</p> <p class="text-center">You currently have $player.inventory.makeup units.</p> <<if $player.status.makeup != 'none'>> <<infoPanel 'w-1/2 mx-auto'>> You're wearing $player.status.makeup makeup <</infoPanel>> <</if>> <div class="link-container"> <<if $player.inventory.makeup <= 0>> <<linkDisabled>> You don't have any makeup units to apply <</linkDisabled>> <<else>> [[Light Makeup|MakeUp][addMakeup('light')]] <<if hasSkill('makeup', 5)>> [[Heavy Makeup|MakeUp][addMakeup('heavy')]] <<else>> <<set _reqs = {'makeup': 5}>> <<linkDisabled _reqs>> You need to practice your makeup skills to unlock this option <</linkDisabled>> <</if>> <<if hasSkill('makeup', 10)>> [[Slutty Makeup|MakeUp][addMakeup('slutty')]] <<else>> <<set _reqs = {'makeup': 10}>> <<linkDisabled _reqs>> You need to practice your makeup skills to unlock this option <</linkDisabled>> <</if>> <<if hasSkill('makeup', 15)>> [[Bimbo Makeup|MakeUp][addMakeup('bimbo')]] <<else>> <<set _reqs = {'makeup': 15}>> <<linkDisabled _reqs>> You need to practice your makeup skills to unlock this option <</linkDisabled>> <</if>> <<if hasSkill('makeup', 15)>> [[Professional Makeup|MakeUp][addMakeup('professional')]] <<else>> <<set _reqs = {'makeup': 15}>> <<linkDisabled _reqs>> You need to practice your makeup skills to unlock this option <</linkDisabled>> <</if>> <<if !$dailyChecks.practiceMakeup>> [[Practice Makeup|MakeUp][practiceMakeup()]] <<else>> <<linkDisabled>> You already practiced your Makeup skills today <</linkDisabled>> <</if>> <</if>> [[Go Back|Bathroom]] </div>
<p class="text-center">What kind of porn you want to watch today?</p> <div class="link-container"> [[Straight Porn|PornWatch][$pornType = 'straight']] <<if $generalCounters.pornWatch >= 3>> [[Lesbian Porn|PornWatch][$pornType = 'lesbian']] <</if>> <<if $generalCounters.pornWatch >= 5>> [[Anal Porn|PornWatch][$pornType = 'anal']] <</if>> <<if $generalCounters.pornWatch >= 7>> [[Group Porn|PornWatch][$pornType = 'group']] <</if>> <<if $generalCounters.pornWatch >= 10>> [[Hardcore Porn|PornWatch][$pornType = 'hardcore']] <</if>> <<if $generalCounters.pornWatch < 10>> <<linkDisabled>> Keep watching to unlock more categories <</linkDisabled>> <</if>> [[Go Back|Computer]] </div>
<<if !$masturbate>> <<set _media = 'actions.porn.' + $pornType>> <p class="text-center">You're watching porn</p> <<bodyMedia _media>> <<run watchPorn()>> <<else>> <p class="text-center">You're mastubarting while watching porn</p> <<bodyMedia 'actions.sex.masturbate.pc'>> <<run updateSexCounter('masturbate')>> <</if>> <div class="link-container"> <<if $masturbate>> <<set $masturbate = false>> [[Go Back|Computer]] <<else>> <<if hasCorruption(5) && !$masturbate>> [[Masturbate while watching|PornWatch][$masturbate = true]] <<else>> <<set _reqs = {'cor': 5}>> <<linkDisabled _reqs>> You don't feel horny enough to masturbate <</linkDisabled>> <</if>> [[Go Back|Computer]] <</if>> </div>
<p class="text-center">You're Playing Video Games!</p> <<run playVideoGames()>> <<bodyMedia 'actions.mundane.gaming'>> <div class="link-container"> [[Go Back|Computer]] </div>
<p class="text-center">Select your portrait!</p> <div class="grid grid-cols-4 mt-5 gap-5"> <<link [img[src/mc/portraits/looks/0-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/0-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/0-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<if hasCorruption(15)>> <<link [img[src/mc/portraits/corruption/15-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/15-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasCorruption(30)>> <<link [img[src/mc/portraits/corruption/30-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/30-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasCorruption(50)>> <<link [img[src/mc/portraits/corruption/50-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/50-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/50-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/50-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/50-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/50-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasCorruption(75)>> <<link [img[src/mc/portraits/corruption/75-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/75-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/75-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/75-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/75-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/75-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasCorruption(100)>> <<link [img[src/mc/portraits/corruption/100-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/100-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/100-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/100-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/100-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/100-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/100-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/100-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/corruption/100-5.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/corruption/100-5.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasExposition(15)>> <<link [img[src/mc/portraits/exposition/15-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/15-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/15-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/15-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/15-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/15-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasExposition(30)>> <<link [img[src/mc/portraits/exposition/30-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/30-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/30-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/30-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/30-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/30-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/30-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/30-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasExposition(50)>> <<link [img[src/mc/portraits/exposition/50-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/50-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/50-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/50-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/50-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/50-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/50-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/50-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasExposition(75)>> <<link [img[src/mc/portraits/exposition/75-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/75-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/75-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/75-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/75-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/75-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/75-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/75-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/75-5.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/75-5.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasExposition(100)>> <<link [img[src/mc/portraits/exposition/100-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/100-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/100-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/100-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/100-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/100-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/100-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/100-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/exposition/100-5.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/exposition/100-5.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasStat('looks', 15)>> <<link [img[src/mc/portraits/looks/15-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/15-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/15-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/15-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/15-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/15-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasStat('looks', 30)>> <<link [img[src/mc/portraits/looks/30-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/30-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/30-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/30-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/30-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/30-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasStat('looks', 50)>> <<link [img[src/mc/portraits/looks/50-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/50-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/50-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/50-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/50-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/50-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasStat('looks', 75)>> <<link [img[src/mc/portraits/looks/75-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/75-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/75-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/75-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/75-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/75-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasStat('looks', 100)>> <<link [img[src/mc/portraits/looks/100-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/100-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/100-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/100-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/looks/100-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/100-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> <<if hasPerk('bimbo')>> <<link [img[src/mc/portraits/perks/bimbo/bimbo-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/perks/bimbo/bimbo-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/perks/bimbo/bimbo-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/perks/bimbo/bimbo-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/perks/bimbo/bimbo-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/perks/bimbo/bimbo-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <<link [img[src/mc/portraits/perks/bimbo/bimbo-4.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/perks/bimbo/bimbo-4.jpg'>> <<replace "#confirm">> [[Confirm Selection|Mirror][setPortrait($selectedPortrait)]] <</replace>> <</link>> <</if>> </div> <div id="confirm" class="link-container mt-8"></div> <div class="link-container"> [[Go Back|Mirror]] </div>
<p class="">Wardrobe</p> <p>You're currently wearing:</p> <!-- Current Grid --> <<set _slots = [ {slot: 'outfit', label: 'Outfit'}, {slot: 'underwear', label: 'Underwear'}, {slot: 'shoes', label: 'Shoes'}, {slot: 'legwear', label: 'Legwear'}, {slot: 'earring', label: 'Earring'}, {slot: 'neckwear', label: 'Neckwear'}, {slot: 'buttwear', label: 'Accessories'} ]>> <div class="grid grid-cols-4 gap-5 mt-3"> <<for _slotObj range _slots>> <div class="flex flex-col gap-3 items-center justify-center"> <p class="text-sm text-center"><strong><<= _slotObj.label >></strong></p> <<if $player.outfit[_slotObj.slot]>> <img @src="$clothingItems[$player.outfit[_slotObj.slot]].asset" class="object-cover rounded-lg transition-all duration-300 hover:scale-130"> <<capture _slotObj.slot>> <<link "Take it off">> <<set $player.outfit[_slotObj.slot] = false>> <<if _slotObj.slot == 'buttwear'>> <<set $player.buttplug = false>> <</if>> <<goto "Wardrobe">> <</link>> <</capture>> <<else>> <p class="text-sm font-bold text-center">Nothing!</p> <</if>> </div> <</for>> </div> <hr> <!-- Filter --> <<if !$wardrobeFilter>> <<set $wardrobeFilter = {'slot': 'outfit', label: 'Outfit'}>> <</if>> <p class="text-sm mt-3">Filtering by: $wardrobeFilter.label </p> <div class="flex flex-row gap-2 my-3 w-full flex-wrap justify-between"> <<link "Outfits">> <<set $wardrobeFilter = {'slot': 'outfit', label: 'Outfit'}>> <<goto "Wardrobe">> <</link>> <<link "Underwear">> <<set $wardrobeFilter = {'slot': 'underwear', label: 'Underwear'}>> <<goto "Wardrobe">> <</link>> <<link "Shoes">> <<set $wardrobeFilter = {'slot': 'shoes', label: 'Shoes'}>> <<goto "Wardrobe">> <</link>> <<link "Legwear">> <<set $wardrobeFilter = {'slot': 'legwear', label: 'Legwear'}>> <<goto "Wardrobe">> <</link>> <<link "Earring">> <<set $wardrobeFilter = {'slot': 'earring', label: 'Earring'}>> <<goto "Wardrobe">> <</link>> <<link "Neckwear">> <<set $wardrobeFilter = {'slot': 'neckwear', label: 'Neckwear'}>> <<goto "Wardrobe">> <</link>> <<link "Accessories">> <<set $wardrobeFilter = {'slot': 'buttwear', label: 'Accessories'}>> <<goto "Wardrobe">> <</link>> </div> <div class="grid grid-cols-4 gap-5"> <<for _itemKey range $player.inventory.clothing[$wardrobeFilter.slot]>> <<set _item = $clothingItems[_itemKey]>> <div class="default-container gap-1"> <<image _item.asset>> <p class="text-sm text-center"> <<print _item.name>> </p> <<capture _itemKey>> <<link "Wear!">> <<set $player.outfit[$wardrobeFilter.slot] = _itemKey>> <<if $wardrobeFilter.slot == 'buttwear'>> <<set $player.buttplug = getRandomMedia('actions.status.buttplug')>> <</if>> <<goto "Wardrobe">> <</link>> <</capture>> </div> <</for>> </div> <div class="link-container"> [[Go Back|Bedroom]] </div>
<<if !$socialMediaStatus.onlyfans.status>> You're about to open an OnlyFans account! Please enter your desired username! <<textbox "$name" "Name">> <div class="link-container"> [[Open Account|OnlyFans][joinOnlyFans($name)]] [[Go Back|Home]] </div> <<else>> <p class="text-center">Here's your OnlyFans Account: $socialMediaStatus.onlyfans.username</p> <div class="link-container"> <<if !$dailyChecks.onlyFansPost>> [[Make a post|OnlyFansPostPrep]] <<else>> <<linkDisabled>> You already made a post today. <</linkDisabled>> <</if>> [[Go Back|Computer]] </div> <</if>>
<p class="text-center">What do you plan on posting today?</p> <div class="link-container"> [[Teasing|OnlyFansPost][$onlyFansPost = 'tease']] <<if hasCorruption(20) && hasExposition(20)>> [[Bikini/Lingerie|OnlyFansPost][$onlyFansPost = 'bikini']] <<else>> <<set _reqs = {'cor': 20, 'expo': 20}>> <<linkDisabled _reqs>> Bikini/Lingerie <</linkDisabled>> <</if>> <<if hasCorruption(25) && hasExposition(25)>> [[Naked|OnlyFansPost][$onlyFansPost = 'naked']] <<else>> <<set _reqs = {'cor': 25, 'expo': 25}>> <<linkDisabled _reqs>> Naked <</linkDisabled>> <</if>> <<if hasCorruption(30) && hasExposition(30)>> [[Masturbate|OnlyFansPost][$onlyFansPost = 'masturbate']] <<else>> <<set _reqs = {'cor': 30, 'expo': 30}>> <<linkDisabled _reqs>> Masturbate <</linkDisabled>> <</if>> <<if hasCorruption(35) && hasExposition(35)>> [[Dildo|OnlyFansPost][$onlyFansPost = 'dildo']] <<else>> <<set _reqs = {'cor': 35, 'expo': 35}>> <<linkDisabled _reqs>> Dildo <</linkDisabled>> <</if>> <<if hasCorruption(45) && hasExposition(45)>> [[Dildo Anal|OnlyFansPost][$onlyFansPost = 'dildo_anal']] <<else>> <<set _reqs = {'cor': 45, 'expo': 45}>> <<linkDisabled _reqs>> Dildo Anal <</linkDisabled>> <</if>> <<if hasCorruption(50) && hasExposition(50)>> [[Blowjob|OnlyFansPost][$onlyFansPost = 'blowjob']] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> Blowjob <</linkDisabled>> <</if>> <<if hasCorruption(55) && hasExposition(5)>> [[Sex|OnlyFansPost][$onlyFansPost = 'sex']] <<else>> <<set _reqs = {'cor': 55, 'expo': 55}>> <<linkDisabled _reqs>> Sex <</linkDisabled>> <</if>> <<if hasCorruption(60) && hasExposition(60)>> [[Lesbian|OnlyFansPost][$onlyFansPost = 'lesbian']] <<else>> <<set _reqs = {'cor': 60, 'expo': 60}>> <<linkDisabled _reqs>> Lesbian <</linkDisabled>> <</if>> <<if hasCorruption(65) && hasExposition(65)>> [[Group Sex|OnlyFansPost][$onlyFansPost = 'group']] <<else>> <<set _reqs = {'cor': 65, 'expo': 65}>> <<linkDisabled _reqs>> Group Sex <</linkDisabled>> <</if>> <<if hasCorruption(70) && hasExposition(70)>> [[Cumplay|OnlyFansPost][$onlyFansPost = 'cumplay']] <<else>> <<set _reqs = {'cor': 70, 'expo': 70}>> <<linkDisabled _reqs>> Cumplay <</linkDisabled>> <</if>> [[Go Back|OnlyFans]] </div>
<p class="text-center">You just posted on Onlyfans!</p> <<set $earnings = onlyFansPost($onlyFansPost)>> <<set _media = 'actions.onlyfans.' + $onlyFansPost>> <<bodyMedia _media>> <<successMessage>> You earned $ $earnings.earnings, also $ $earnings.passiveEarnings as passive earning! You also got $earnings.earnings new followers <</successMessage>> <div class="link-container"> [[Go Back|OnlyFans]] </div>
<p class="text-center">How you're going to stream today?</p> <div class="link-container"> [[Casual Gaming|Streaming][$streamType = 'casual']] [[Improve Gaming|Streaming][$streamType = 'improve_gaming']] [[Just Chatting|Streaming][$streamType = 'just_chatting']] [[Go Back|Computer]] </div>
<p>You've streamed for a couple of hours and made:</p> <<set _result = streamerWork($streamType)>> <<if hasCorruption(50)>> <<bodyMedia 'actions.work.streaming.100'>> <<elseif hasCorruption(10)>> <<bodyMedia 'actions.work.streaming.75'>> <<elseif hasCorruption(30)>> <<bodyMedia 'actions.work.streaming.50'>> <<elseif hasCorruption(20)>> <<bodyMedia 'actions.work.streaming.30'>> <<elseif hasCorruption(10)>> <<bodyMedia 'actions.work.streaming.15'>> <<else>> <<bodyMedia 'actions.work.streaming.0'>> <</if>> <<successMessage>> <p class="font-bold">You've earned:</p> <p class=""><strong>Base Pay</strong>: $ <<= _result.total >></p> <p class=""><strong>Followers</strong>: <<= _result.followersGain >></p> <</successMessage>> <div class="link-container"> [[Go Back|Computer]] </div>
<<run learnSkill($skillToLearn)>> <<run flipDailyCheck('computerLearnSkill')>> <<run useEnergy(30)>> <<run useHunger(30)>> <<run useHygiene(20)>> <<run skipTime(1, 0, false)>> <<set $generalCounters.studied++>> <<switch($skillToLearn)>> <<case 'programming'>> <p class="text-center">You are learning how to program!</p> <</switch>> <div class="link-container"> [[Go Back|Computer]] </div>
<p class="text-center">Here's the jobs you can do!</p> <div class="link-container"> <<if !$jobData.dev >> <<if hasSkill('programming', 5)>> [[Apply to a Developer Remote Job|Dev Job]] <<else>> <<set _reqs = {'programming': 5}>> <<linkDisabled _reqs>> You don't have enough programming skills to try for a remote job <</linkDisabled>> <</if>> <<else>> <<if !$dailyChecks.devWork>> <<if hasEnergy(20) && hasHunger(30)>> [[Work as a Developer|DevWorkPrep]] <<else>> <<set _reqs = {'energy': 20, 'hunger': 30}>> <<linkDisabled _reqs>> Not enough energy or hunger to work as a developer <</linkDisabled>> <</if>> <<else>> <<linkDisabled>> You already worked on a project today <</linkDisabled>> <</if>> <</if>> [[Go Back|Computer]] </div>
<p class="text-center">You have a new Job as a Developer, you can work freely, but you only get paid per project completed.</p> <<set $jobData.dev = true>> <div class="link-container"> [[Go Back|ComputerJobs]] </div>
<p class="text-center">How do you plan on working today?</p> <div class="link-container"> <<if $devData.currentProject>> [[Continue Working on Project|DevWork]] <<else>> [[Easy Project (quick turnout, low pay, no passive income generated)|DevWork][$devData.currentProject = 'easy']] <<if hasSkill('programming', 10)>> [[Medium Project (average turnout, average pay, small passive income generated)|DevWork][$devData.currentProject = 'medium']] <<else>> <<set _reqs = {'programming': 10}>> <<linkDisabled _reqs>> You need to improve your programming skills to take medium projects <</linkDisabled>> <</if>> <<if hasSkill('programming', 20)>> [[Hard Project (long turnout, high pay, decent passive income generated)|DevWork][$devData.currentProject = 'hard']] <<else>> <<set _reqs = {'programming': 20}>> <<linkDisabled _reqs>> You need to improve your programming skills to take hard projects <</linkDisabled>> <</if>> <</if>> [[Go Back|ComputerJobs]] </div>
<p class="text-center">You worked on the project!</p> <<run devWork()>> <<flash>> <<if $devData.currentProject>> <<infoPanel 'w-1/2 mx-auto'>> <p><strong>Project Progress:</strong> $devData.currentProjectProgress %</p> <</infoPanel>> <</if>> <div class="link-container"> [[Go Back|ComputerJobs]] </div>
<<include "GameInitialization">> <<include "GameProgress">> <<include "HelperClass">> <<include "MediaClass">> <<include "ClothingClass">> <<include "TattooClass">> <<include "CharacterClass">> <<include "CharacterHelperClass">> <<include "HistoryClass">> <<include "JobClass">> <<include "WorldClass">> <<include "ItemClass">> <<include "SocialMediaClass">> <<set $player = new setup.classes.Character('name')>> <div class="flex flex-col items-center justify-center h-full"> <h1 class="text-2xl font-bold text-center"> Welcome to Just a Woman! <<video "src/system/logos/logos.mp4">> <p class="text-base mt-4"> Step into the life of a modern woman and shape your own story! In <strong>Just a Woman</strong>, you'll navigate daily routines, pursue education, build your career, explore relationships, and make choices that impact your journey. From university classes and office jobs to modeling, nightlife, and social media, every decision opens new opportunities and challenges. Customize your look, manage your resources, and discover how far your ambition, charm, and courage can take you. Your story is yours to create! </p> <p class="text-sm text-red-500 mt-4 font-bold"> <strong>Disclaimer:</strong> This game is intended for adults (18+) only. By continuing, you confirm you are of legal age in your country. </p> </h1> [[Start Game|InitialScene]] </div>
<<script>> setup.classes = {}; <</script>> <<script>> Config.saves.isAllowed = function () { const currentPassage = State.passage; return !Story.get(currentPassage).tags.includes("no-return"); }; Config.passages.nobr = true; $(document).on(':passagestart', function () { if (!tags().includes('no-return')) { $('#menu-item-saves').show(); } else { $('#menu-item-saves').hide(); } }); <</script>>
<p class="text-center"> You are a young woman who has just left your parents' house and moved into a small, cheap apartment. Now, you're on your own and must navigate the challenges of adult life. Whether you choose to pursue education, build a career, explore relationships, or take riskier paths that may corrupt your character, every decision shapes your journey. Will you rise to success, or will you sacrifice your morals to make it in the world? The choice is yours. </p> <p class="text-center bold mt-8">But first, choose your portrait!<small> This can be changed later, when you're better looking and more confident.</small></p> <div class="flex flex-row items-center justify-center mt-5 gap-5"> <div class="w-40"> <<link [img[src/mc/portraits/looks/0-1.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-1.jpg'>> <<replace "#confirm">> [[Confirm Selection|Home][setPortrait($selectedPortrait); setName($name);historyGameInit($selectedPortrait)]] <</replace>> <</link>> </div> <div class="w-40"> <<link [img[src/mc/portraits/looks/0-2.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-2.jpg'>> <<replace "#confirm">> [[Confirm Selection|Home][setPortrait($selectedPortrait); setName($name);historyGameInit($selectedPortrait)]] <</replace>> <</link>> </div> <div class="w-40"> <<link [img[src/mc/portraits/looks/0-3.jpg]]>> <<set $selectedPortrait = 'src/mc/portraits/looks/0-3.jpg'>> <<replace "#confirm">> [[Confirm Selection|Home][setPortrait($selectedPortrait); setName($name);historyGameInit($selectedPortrait)]] <</replace>> <</link>> </div> </div> <p class="mt-3 mb-1 text-center">Type in your name</p> <div class="flex items-center justify-center"> <<textbox "$name" "Name">> </div> <div id="confirm" class="mt-8 link-container"></div>
<p class="text-center">Welcome to Uni! <<if $uniData.enrolled>> You are enrolled. <<else>> Here you can enroll to a college course for a weekly fee of <span class="font-bold">$ $weeklyChecks.uni.value</span>, enrollment and classes at 9AM Mon-Fri <</if>> </p> <<image "src/locations/university.jpg">> <<if $uniData.enrolled>> <<infoPanel 'w-1/2 mx-auto'>> <p class=""> Uni Info </p> <p class="text-sm"><strong>Attendance (keep > 70%):</strong> <<= (($uniData.classesTaken / $uniData.daysSinceEnroll) * 100).toFixed(2)>>% </p> <p class="text-sm"><strong>Tests Passed (3 for diploma):</strong> $uniData.testsPassed </p> <</infoPanel>> <</if>> <div class="link-container"> <<if $uniData.enrolled && isRecurringTimeMatch('uni')>> <<if hasEnergy(30) && hasHunger(20) && hasHygiene(50)>> [[Join Class|Classroom]] <<else>> <<set _reqs = {'energy':30, 'hunger': 20, 'hygiene': 50}>> <<linkDisabled _reqs>> You need to check yourself before joining class <</linkDisabled>> <</if>> <</if>> <<if !$uniData.enrolled && isRecurringTimeMatch('uni')>> [[Enroll]] <</if>> [[Go Back|Outside][skipTime(0,5)]] </div>
<p class="text-center"> Here's an office building. <<if $jobData.office>>You're employed here, your working hours are <<= formatRecurringTime('office')>><</if>> </p> <<image "src/locations/office.jpg">> <div class="link-container"> <<if $uniData.graduated>> <<if !$jobData.office>> [[Apply for Office Job|OfficeJob]] <<elseif isRecurringTimeMatch('office')>> <<if hasEnergy(30) && hasHunger(20) && hasHygiene(30)>> [[Work|OfficeWorkPrep]] <<else>> <<set _reqs = {'energy':30, 'hunger': 20, 'hygiene': 30}>> <<linkDisabled _reqs>> You need to check yourself before going to work <</linkDisabled>> <</if>> <</if>> <<else>> <<linkDisabled>> You need a college degree to apply for a job here! <</linkDisabled>> <</if>> [[Go Back|Business District][skipTime(0,5)]] </div>
<p class="text-center">How are you planning on working today?</p> <<if $officeData.fame != 'none'>> <<set _fameMedia = 'actions.work.office.fame.' + $officeData.fame>> <<bodyMedia _fameMedia>> <p class="text-center"><<= $officeData.fameDetails[$officeData.fame].description>></p> <</if>> <div class="link-container"> [[Light Work|OfficeWork][$officeWorkType = 'light']] [[Heavy Work|OfficeWork][$officeWorkType = 'heavy']] <<if hasStat('charisma', 7)>> [[Charm your way|OfficeWork][$officeWorkType = 'charm']] <<else>> <<set _reqs = {'cha': 7}>> <<linkDisabled _reqs>> You're not charismatic enough to charm your way around <</linkDisabled>> <</if>> <<if hasCorruption(20)>> [[Flirt your way|OfficeWork][$officeWorkType = 'flirt']] <<else>> <<set _reqs = {'cor': 20}>> <<linkDisabled _reqs>> You're not corrupted enough to flirt your way around <</linkDisabled>> <</if>> <<if hasCorruption(25)>> [[Tease your way|OfficeWork][$officeWorkType = 'tease']] <<else>> <<set _reqs = {'cor': 25}>> <<linkDisabled _reqs>> You're not corrupted enough to tease your way around <</linkDisabled>> <</if>> <<if hasCorruption(30)>> [[Blow your way|OfficeWork][$officeWorkType = 'blow']] <<else>> <<set _reqs = {'cor': 30}>> <<linkDisabled _reqs>> You're not corrupted enough to blow your way around <</linkDisabled>> <</if>> <<if hasCorruption(40)>> [[Fuck your way|OfficeWork][$officeWorkType = 'fuck']] <<else>> <<set _reqs = {'cor': 40}>> <<linkDisabled _reqs>> You're not corrupted enough to fuck your way around <</linkDisabled>> <</if>> [[Go Back|Office]] </div>
<p class="text-center">You worked in the office!</p> <<set _officeWorkResult = officeWork($officeWorkType)>> <<switch $officeWorkType>> <<case 'light'>> <p class="text-center">You spent the day handling paperwork, answering emails, and supporting your team with daily office tasks. It was a productive but routine day at the office.</p> <<bodyMedia 'actions.work.office.light'>> <<case 'heavy'>> <p class="text-center">You spent the day managing complex projects, leading meetings, and ensuring your team met its goals. It was a challenging but rewarding day at the office.</p> <<bodyMedia 'actions.work.office.heavy'>> <<case 'charm'>> <p class="text-center">You spent the day charming your coworkers, making them laugh, and creating a positive atmosphere. Your charisma really shone through today.</p> <<bodyMedia 'actions.work.office.charm'>> <<case 'flirt'>> <p class="text-center">You spent the day flirting with your coworkers, using your charm to create a fun and playful atmosphere. Your confidence really stood out today.</p> <<bodyMedia 'actions.work.office.flirt'>> <<case 'tease'>> <p class="text-center">You spent the day teasing your coworkers, playfully pushing their buttons and creating a fun atmosphere. Your wit and charm really shone through today.</p> <<bodyMedia 'actions.work.office.tease'>> <<case 'blow'>> <p class="text-center">You spent the day providing exceptional service, going above and beyond to satisfy your clients. Your dedication and hard work really paid off today.</p> <<bodyMedia 'actions.work.office.blow'>> <<case 'fuck'>> <p class="text-center">You spent the day engaging in intimate encounters with your coworkers, creating a fun and playful atmosphere. Your confidence really stood out today.</p> <<bodyMedia 'actions.work.office.fuck'>> <</switch>> <<successMessage>> <p class="">You've made:$ _officeWorkResult.pay</p> <</successMessage>> <div class="link-container"> [[Go Back|Office]] </div>
<p class="text-center">You have enrolled to Uni your classes are Mon-Fri 9AM. You'll need to pass 5 tests to get a diploma, test perfomance it's based on attendance, so don't miss your classes!</p> <<set $uniData.enrolled = true>> <<set $weeklyChecks.uni.status = true>> <div class="link-container"> [[Go Back|University]] </div>
<p class="text-center">You are in the classroom!</p> <<image "src/locations/classroom.jpg">> <<set $returnTo = passage()>> <div class="link-container"> <<if !$uniData.testDay >> <<link "Pay Attention">> <<set $classSelection = 'int'>> <<goto "ClassTaken">> <</link>> <<link "Socialize">> <<set $classSelection = 'cha'>> <<goto "ClassTaken">> <</link>> <<if hasCorruption(5)>> <<link "Flirt with classmates">> <<set $classSelection = 'flirt'>> <<goto "ClassTaken">> <</link>> <<else>> <<set _reqs = {'cor': 5}>> <<linkDisabled _reqs>> You don't feel corrupted enough to flirt with classmates <</linkDisabled>> <</if>> <<if hasExposition(5)>> <<link "Flash your classmates">> <<set $classSelection = 'flash'>> <<goto "ClassTaken">> <</link>> <<else>> <<set _reqs = {'expo': 5}>> <<linkDisabled _reqs>> You don't feel inhibited enough to flash yourself during class <</linkDisabled>> <</if>> <<else>> [[Take this Week test|University Test]] <</if>> [[Go Back|University]] </div>
<p class="text-center">Here's the gym, working out here costs at least $25</p> <<image "src/locations/gym.jpg">> <div class="link-container"> <<if $dailyChecks.workedOut>> <<linkDisabled>> You already worked out today! <</linkDisabled>> <<else>> <<if hasEnergy(30) && hasHunger(30) && !$dailyChecks.workedOut && hasMoney(25) >> [[Work Out|WorkOutPrep]] <<else>> <<set _reqs = {'energy': 30, 'hunger': 30, 'money': 25} >> <<linkDisabled _reqs>> You are too tired or hungry or poor to work out <</linkDisabled>> <</if>> <</if>> [[Go Back|District][skipTime(0,5)]] </div>
<p class="text-center">What's you focus today? Regular workouts are $25, Dance Lessons are $50</p> <div class="link-container"> [[Cardio|WorkOut][$workoutType = 'cardio']] [[Full Body|WorkOut][$workoutType = 'full_body']] <<if hasMoney(50)>> [[Dance Lessons|WorkOut][$workoutType = 'dance_lessons']] <<else>> <<linkDisabled>> Not enough money for dance lessons <</linkDisabled>> <</if>> [[Go Back|Gym]] </div>
<p class="text-center">You Worked Out!</p> <<run workout($workoutType)>> <<if hasCorruption(30) && ($workoutType == 'cardio' || $workoutType == 'full_body') >> <<bodyMedia 'actions.gym.workout.corrupted'>> <<elseif $workoutType == 'cardio' || $workoutType == 'full_body'>> <<bodyMedia 'actions.gym.workout.pure'>> <</if>> <<if hasCorruption(0) && $workoutType == 'dance_lessons'>> <<bodyMedia 'actions.gym.dance.corrupted'>> <<elseif $workoutType == 'dance_lessons'>> <<bodyMedia 'actions.gym.dance.pure'>> <</if>> <div class="link-container"> [[Go Back|Gym]] </div>
<p class="">Clothing Shop</p> <<flash>> <hr> <<set _shopFilter = {'filter': 'clothing_shop', 'slot': 'outfit'}>> <<set $returnToShop = passage()>> <<set _shop = 'clothing_shop'>> <<clothingShop _shopFilter $returnToShop _shop>> <div class="link-container"> [[Go Back|Shops][skipTime(0,5);$filter = null]] </div>
<<if canBuyItem($selectedItem, $clothingItems)>> <<set $flashMessage = "You bought " + $clothingItems[$selectedItem].name >> <<set $flashSuccess = true>> <<run buyClothingItem($selectedItem)>> <<else>> <<set $flashMessage = "You don't have enough money">> <<set $flashSuccess = false>> <</if>> <<goto $returnTo>>
<p class="text-center">You're in a Grocery shop.</p> <<image "src/locations/market.jpg">> <<flash>> <div class="link-container"> <<link "Buy Food ($ $gameItems.food.cost)">> <<set $item = 'food'>> <<set $itemQuantity = 1>> <<set $returnTo = passage()>> <<goto "MarketPurchase">> <</link>> <<if hasMoney($gameItems.food.cost * 5)>> <<set _calc = $gameItems.food.cost * 5>> <<link "Buy 5 Food ($ _calc)">> <<set $item = 'food'>> <<set $itemQuantity = 5>> <<set $returnTo = passage()>> <<goto "MarketPurchase">> <</link>> <</if>> <<link "Buy Makeup ($ $gameItems.makeup.cost)">> <<set $item = 'makeup'>> <<set $itemQuantity = 1>> <<set $returnTo = passage()>> <<goto "MarketPurchase">> <</link>> <<if hasMoney($gameItems.makeup.cost * 5)>> <<set _calc = $gameItems.makeup.cost * 5>> <<link "Buy 5 Makeups ($ _calc)">> <<set $item = 'makeup'>> <<set $itemQuantity = 5>> <<set $returnTo = passage()>> <<goto "MarketPurchase">> <</link>> <</if>> [[Go Back|Local Shops]] </div>
<<if canBuyItem($item, null, $itemQuantity)>> <<set $flashMessage = "You bought " $itemQuantity + " " + $gameItems[$item].name >> <<set $flashSuccess = true>> <<run buyItem($item, null, $itemQuantity)>> <<else>> <<set $flashMessage = "You don't have enough money">> <<set $flashSuccess = false>> <</if>> <<goto $returnTo>>
<p class="text-center">You're in a Eletronics Shop.</p> <<flash>> <<set _returnTo = passage()>> <div class="link-container"> <<if !$player.inventory.phone>> <<if hasMoney($gameItems.phone.cost)>> <<link "Buy Phone 💵 $gameItems.phone.cost">> <<set $item = 'phone'>> <<set $returnTo = passage()>> <<goto "ElectronicsPurchase">> <</link>> <<else>> <<set _reqs = {'money': $gameItems.phone.cost}>> <<linkDisabled _reqs>> You don't have enough money for a Phone <</linkDisabled>> <</if>> <</if>> <<if !$player.inventory.computer>> <<if hasMoney($gameItems.computer.cost)>> <<link "Buy Computer 💵 $gameItems.computer.cost">> <<set $item = 'computer'>> <<set $returnTo = passage()>> <<goto "ElectronicsPurchase">> <</link>> <<else>> <<set _reqs = {'money': $gameItems.computer.cost}>> <<linkDisabled _reqs>> You don't have enough money for a Computer <</linkDisabled>> <</if>> <</if>> <<if !$player.inventory.webcam>> <<if hasMoney($gameItems.webcam.cost)>> <<link "Buy Webcam 💵 $gameItems.webcam.cost">> <<set $item = 'webcam'>> <<set $returnTo = passage()>> <<goto "ElectronicsPurchase">> <</link>> <<else>> <<set _reqs = {'money': $gameItems.webcam.cost}>> <<linkDisabled _reqs>> You don't have enough money for a Webcam <</linkDisabled>> <</if>> <</if>> [[Go Back|Shops]] </div> <<silent>> [[ElectronicsPurchase]] <</silent>>
<<if canBuyItem($item)>> <<set $flashMessage = "You bought " + $gameItems[$item].name >> <<set $flashSuccess = true>> <<run buyItem($item)>> <<else>> <<set $flashMessage = "You don't have enough money">> <<set $flashSuccess = false>> <</if>> <<goto $returnTo>>
<<run university($classSelection)>> <<if $classSelection == 'int'>> <p class="text-center">You're paying attention to class</p> <<bodyMedia 'actions.university.focus'>> <</if>> <<if $classSelection == 'cha'>> <p class="text-center">You're socializing with your classmates</p> <<bodyMedia 'actions.university.socialize'>> <</if>> <<if $classSelection == 'flirt'>> <p class="text-center">You're flirting with your classmates</p> <<bodyMedia 'actions.university.flirt'>> <</if>> <<if $classSelection == 'flash'>> <p class="text-center">You decided to flash yourself in the classroom</p> <<bodyMedia 'actions.university.flash'>> <</if>> <div class="link-container"> [[Go Back|University]] </div>
<p class="text-center">You're in a Modelling Agency</p> <div class="link-container"> <<if !$jobData.modelling>> <<if hasStat('looks', 30) && hasExposition(15)>> [[Apply for a Modelling Job|ModelJob]] <<else>> <<set _reqs = {'looks': 30, 'expo': 15} >> <<linkDisabled _reqs>> You don't have the looks and the inhibition to apply here <</linkDisabled>> <</if>> <</if>> <<if $jobData.modelling && isRecurringTimeMatch('modelling')>> [[Modelling Work|ModelWorkPrep]] <</if>> [[Go Back|Business District][skipTime(0,5)]] </div>
<<set $jobData.modelling = true>> <p class="text-center">You have a new Job as a Model, your times are <<=formatRecurringTime('modelling')>></p> <div class="link-container"> [[Go Back|Modelling]] </div>
<p class="text-center">What kind of shooting are you looking for today?</p> <<flash>> <div class="link-container"> <<if $modelData.path == 'choose'>> <<infoPanel>> <p>You are approached by the Modelling agency owner, he's asking you which path you want to follow?</p> <div class="link-container"> <<link "Runway Model Work">> <<set $modelData.path = 'model'>> <<set $modelData.path_completed = true>> <<set $flashMessage = "You chose the Runway Model path">> <<set $flashSuccess = true>> <<goto "ModelWorkPrep">> <</link>> <<if hasCorruption('20') && hasExposition(20)>> <<link "Erotic Model">> <<set $modelData.path = 'erotic'>> <<set $modelData.path_completed = true>> <<set $flashMessage = "You chose the Erotic Model path">> <<set $flashSuccess = true>> <<goto "ModelWorkPrep">> <</link>> <<else>> <<set _reqs = {'cor': 20, 'expo': 20} >> <<linkDisabled _reqs>> You need more corruption and exposition to choose the Erotic Model path <</linkDisabled>> <</if>> [[Not sure! (you'll be able to accept in another time)|ModelWorkPrep][$modelData.path = 'none']] </div> <</infoPanel>> <</if>> <<if $modelData.porn_invite && !$pornStarData.studioUnlocked>> <<infoPanel>> <p class="font-bold text-lg">You are approached again by the Modelling agency owner, he mentions that if you're looking for heavier work, you might want to consider checking out the Porn Studio on the Shady District</p> <<set $modelData.porn_invite = false>> <<set $pornStarData.studioUnlocked = true>> <</infoPanel>> <</if>> <<if hasEnergy(30) && hasHunger(20) && hasHygiene(50)>> <<if $modelData.path == 'none'>> [[Amateur Photoshoot|ModelWork][$modelWork = 'amateur_photoshoot']] <<if hasStat('looks', 40)>> [[Catalog Photoshoot|ModelWork][$modelWork = 'catalog_photoshoot']] <<else>> <<set _reqs = {'looks': 40}>> <<linkDisabled _reqs>> You don't have enough looks for a Catalog Photoshoot <</linkDisabled>> <</if>> <</if>> <<if $modelData.path == 'model'>> <<if hasStat('looks', 45)>> [[Amateur Runway|ModelWork][$modelWork = 'amateur_runway']] <<else>> <<set _reqs = {'looks': 45}>> <<linkDisabled _reqs>> You don't have enough looks for an Amateur Runway <</linkDisabled>> <</if>> <<if hasStat('looks', 50)>> [[Magazine Photoshoot|ModelWork][$modelWork = 'magazine_photoshoot']] <<else>> <<set _reqs = {'looks': 50}>> <<linkDisabled _reqs>> You don't have enough looks for a Magazine Photoshoot <</linkDisabled>> <</if>> <<if hasStat('looks', 60)>> [[International Runway|ModelWork][$modelWork = 'international_runway']] <<else>> <<set _reqs = {'looks': 60}>> <<linkDisabled _reqs>> You don't have enough looks for a International Runway <</linkDisabled>> <</if>> <</if>> <<if $modelData.path == 'erotic'>> <<if hasStat('looks', 40) && hasCorruption(20) && hasExposition(20)>> [[Bikini/Lingerie Photoshoot|ModelWork][$modelWork = 'bikini_lingerie_photoshoot']] <<else>> <<set _reqs = {'looks': 40, 'cor': 20, 'expo': 20}>> <<linkDisabled _reqs>> You don't have the requirements for a Bikini/Lingerie Photoshoot <</linkDisabled>> <</if>> <<if hasStat('looks', 40) && hasCorruption(25) && hasExposition(25)>> [[Erotic Photoshoot|ModelWork][$modelWork = 'erotic_photoshoot']] <<else>> <<set _reqs = {'looks': 40, 'cor': 25, 'expo': 25}>> <<linkDisabled _reqs>> You don't have the requirements for an Erotic Photoshoot <</linkDisabled>> <</if>> <<if hasStat('looks', 40) && hasCorruption(30) && hasExposition(30)>> [[Adult Photoshoot|ModelWork][$modelWork = 'adult_photoshoot']] <<else>> <<set _reqs = {'looks': 40, 'cor': 30, 'expo': 30}>> <<linkDisabled _reqs>> You don't have the requirements for an Adult Photoshoot <</linkDisabled>> <</if>> <</if>> <<if !$modelData.path_completed>> <<linkDisabled>> You need to keep working on your looks and photoshoots to unlock new opportunities! <</linkDisabled>> <</if>> <<else>> <<set _reqs = {'energy': 30, 'hunger': 20, 'hygiene': 50}>> <<linkDisabled _reqs>> You are too tired, hungry or dirty to work right now <</linkDisabled>> <</if>> [[Go Back|Modelling]] </div>
<p class="text-center">You have a new Job as an Office Worker, your times are <<= formatRecurringTime('office')>></p> <<set $jobData.office = true>> <div class="link-container"> [[Go Back|Office]] </div>
<div class="link-container"> [[Go Back|Shops]] </div>
<p>You're in a Real State Agency</p> <<image "src/locations/real_state.jpg">> <<flash>> <div class="link-container"> <<if hasMoney(10000)>> [[Move to a Medium Apartment (💵10000)|RealState][moveHomeType('medium')]] <<else>> <<set _reqs = {'money': 10000}>> <<linkDisabled _reqs>> You don't have enough money for a Medium Apartment <</linkDisabled>> <</if>> <<if hasMoney(10000)>> [[Move to a Big Apartment (💵20000)|RealState][moveHomeType('big')]] <<else>> <<set _reqs = {'money': 20000}>> <<linkDisabled _reqs>> You don't have enough money for a Big Apartment <</linkDisabled>> <</if>> <<if hasMoney(50000)>> [[Move to a Nice House (💵50000)|RealState][moveHomeType('house')]] <<else>> <<set _reqs = {'money': 50000}>> <<linkDisabled _reqs>> You don't have enough money for a Nice House <</linkDisabled>> <</if>> <<if hasMoney(200000)>> [[Move to a Mansion (💵200000)|RealState][moveHomeType('mansion')]] <<else>> <<set _reqs = {'money': 200000}>> <<linkDisabled _reqs>> You don't have enough money for a Mansion <</linkDisabled>> <</if>> [[Go Back|Shops]] </div>
<p class="text-center">You're in a Beauty Clinic</p> <<image "src/locations/beauty_clinic.jpg">> <div class="link-container"> [[Body Modifications|BodyModifications]] [[Facial Treatments|FacialTreatments]] [[Add Makeup|ChangeMakeup]] [[Change Hair|ChangeHair]] <<if hasTattoos()>> [[Remove Tattoos|TattooRemoval]] <</if>> [[Go Back|District]] </div>
<p class="text-center">Which body modification would you like to undergo?</p> <div class="link-container"> <<if $player.status.surgery.recover>> <<linkDisabled>> You are still recovering from your last surgery ($player.status.surgery.days days remaining) <</linkDisabled>> <<else>> <<if $player.body.bottom === 'Flat' && hasMoney(1000)>> [[Small Ass 💵1000|BodyModifications][surgery('small_ass', 1000)]] <<else>> <<set _reqs = {'money': 1000}>> <<linkDisabled _reqs>> You don't have enough money for a Small Ass surgery <</linkDisabled>> <</if>> <<if $player.body.bottom === 'Small' && hasMoney(2000)>> [[Average Ass 💵2000|BodyModifications][surgery('average_ass', 2000)]] <<else>> <<set _reqs = {'money': 2000}>> <<linkDisabled _reqs>> You don't have enough money or a Small Ass for an Average Ass surgery <</linkDisabled>> <</if>> <<if $player.body.bottom === 'Average' && hasMoney(3000)>> [[Large Ass 💵3000|BodyModifications][surgery('large_ass', 3000)]] <<else>> <<set _reqs = {'money': 3000}>> <<linkDisabled _reqs>> You don't have enough money or an Average Ass for a Large Ass surgery <</linkDisabled>> <</if>> <<if $player.body.bottom === 'Large' && hasMoney(5000)>> [[Huge Ass 💵5000|BodyModifications][surgery('huge_ass', 5000)]] <<else>> <<set _reqs = {'money': 5000}>> <<linkDisabled _reqs>> You don't have enough money or a Large Ass for a Huge Ass surgery <</linkDisabled>> <</if>> <<if $player.body.bottom != 'Huge'>> <<linkDisabled>> Keep improving your ass size! <</linkDisabled>> <</if>> <<if $player.body.breasts === 'Flat' && hasMoney(1000)>> [[Small Breasts 💵1000|BodyModifications][surgery('small_breasts', 1000)]] <<else>> <<set _reqs = {'money': 1000}>> <<linkDisabled _reqs>> You don't have enough money for a Small Breasts surgery <</linkDisabled>> <</if>> <<if $player.body.breasts === 'Small' && hasMoney(2000)>> [[Average Breasts 💵2000|BodyModifications][surgery('average_breasts', 2000)]] <<else>> <<set _reqs = {'money': 2000}>> <<linkDisabled _reqs>> You don't have enough money or Small Breasts for an Average Breasts surgery <</linkDisabled>> <</if>> <<if $player.body.breasts === 'Average' && hasMoney(3000)>> [[Large Breasts 💵3000|BodyModifications][surgery('large_breasts', 3000)]] <<else>> <<set _reqs = {'money': 3000}>> <<linkDisabled _reqs>> You don't have enough money or Average Breasts for a Large Breasts surgery <</linkDisabled>> <</if>> <<if $player.body.breasts === 'Large' && hasMoney(5000)>> [[Huge Breasts 💵5000|BodyModifications][surgery('huge_breasts', 5000)]] <<else>> <<set _reqs = {'money': 5000}>> <<linkDisabled _reqs>> You don't have enough money or Large Breasts for a Huge Breasts surgery <</linkDisabled>> <</if>> <<if $player.body.breasts != 'Huge'>> <<linkDisabled>> Keep improving your breasts size! <</linkDisabled>> <</if>> <</if>> [[Go Back|BeautyClinic]] </div>
<p class="text-center">Which procedure would you like to undergo?</p> <div class="link-container"> <<if $player.status.surgery.recover>> <<linkDisabled>> You are still recovering from your last surgery ($player.status.surgery.days days remaining) <</linkDisabled>> <<else>> <<if $player.body.face === 'Acne'>> [[Smooth Skin Treatment|FacialTreatments][surgery('smooth_skin', 1000)]] <</if>> <<if $player.body.face === 'Smooth'>> [[Silk Smooth Skin Treatment|FacialTreatments][surgery('silk_smooth_skin', 2000)]] <</if>> <<if $player.body.face != 'Silk'>> <<linkDisabled>> Keep improving your skin quality! <</linkDisabled>> <</if>> <<if $player.body.lips === 'Thin'>> [[Average Lips|BodyModifications][surgery('average_lips', 1000)]] <</if>> <<if $player.body.lips === 'Average'>> [[Plump Lips|BodyModifications][surgery('plump_lips', 2000)]] <</if>> <<if $player.body.lips === 'Plump'>> [[Bimbo Lips|BodyModifications][surgery('bimbo_lips', 3500)]] <</if>> <<if $player.body.lips != 'Bimbo'>> <<linkDisabled>> Keep improving your lips! <</linkDisabled>> <</if>> <</if>> [[Go Back|BeautyClinic]] </div>
<p class="text-center">Change your makeup style</p> <<flash>> <div class="link-container"> <<if hasMoney(50)>> [[Light Makeup (💵50)|ChangeMakeup][addMakeup('light');useMoney(50);setFlashMessage(true, "You're now wearing Light Makeup")]] <<else>> <<set _reqs = {'money': 50}>>> <<linkDisabled _reqs>> You don't have enough money for a Light Makeup <</linkDisabled>> <</if>> <<if hasMoney(100)>> [[Medium Makeup (💵100)|ChangeMakeup][addMakeup('medium');useMoney(100);setFlashMessage(true, "You're now wearing Medium Makeup")]] <<else>> <<set _reqs = {'money': 100}>> <<linkDisabled _reqs>> You don't have enough money for a Medium Makeup <</linkDisabled>> <</if>> <<if hasMoney(200)>> [[Heavy Makeup (💵200)|ChangeMakeup][addMakeup('heavy');useMoney(200);setFlashMessage(true, "You're now wearing Heavy Makeup")]] <<else>> <<set _reqs = {'money': 200}>> <<linkDisabled _reqs>> You don't have enough money for a Heavy Makeup <</linkDisabled>> <</if>> <<if hasMoney(300)>> [[Slutty Makeup (💵300)|ChangeMakeup][addMakeup('slutty');useMoney(300);setFlashMessage(true, "You're now wearing Slutty Makeup")]] <<else>> <<set _reqs = {'money': 300}>> <<linkDisabled _reqs>> You don't have enough money for a Slutty Makeup <</linkDisabled>> <</if>> <<if hasMoney(400)>> [[Bimbo Makeup (💵400)|ChangeMakeup][addMakeup('bimbo');useMoney(400);setFlashMessage(true, "You're now wearing Bimbo Makeup")]] <<else>> <<set _reqs = {'money': 400}>> <<linkDisabled _reqs>> You don't have enough money for a Bimbo Makeup <</linkDisabled>> <</if>> <<if hasMoney(500)>> [[Professional Makeup (💵500)|ChangeMakeup][addMakeup('professional');useMoney(500);setFlashMessage(true, "You're now wearing Professional Makeup")]] <<else>> <<set _reqs = {'money': 500}>> <<linkDisabled _reqs>> You don't have enough money for a Professional Makeup <</linkDisabled>> <</if>> [[Go Back|BeautyClinic]] </div>
<p class="text-center">Change your hairstyle</p> <div class="grid grid-cols-3 gap-2"> <<for _itemKey, _itemObj range $hairStyles>> <<set _image = _itemObj.asset >> <div class="default-container gap-1"> <<image _image>> <p class="text-sm text-center"> <<print _itemObj.name>> </p> <p class="text-sm text-center"> Cost: $<<print _itemObj.cost>> </p> <<capture _itemKey>> <<if $player.body.hair === _itemKey>> <<linkDisabled>> This is your current hairstyle <</linkDisabled>> <<else>> <<if canBuyItem(_itemKey, $hairStyles)>> <<link "Buy!">> <<set $player.body.hair = _itemKey>> <<run useMoney(_itemObj.cost)>> <<run showToast('', "You changed your hairstyle!")>> <<goto "ChangeHair">> <</link>> <<else>> <<set _reqs = {'money': _itemObj.cost}>> <<linkDisabled _reqs>> Buy! <</linkDisabled>> <</if>> <</if>> <</capture>> </div> <</for>> </div> <div class="link-container"> [[Go Back|BeautyClinic]] </div>
<p class="text-center">Remove your tattoos</p> <div class="grid grid-cols-3 gap-2"> <div class="flex flex-col gap-2"> <<set _tattooAreas = [ {area: 'wrists', label: 'Wrist'}, {area: 'ankles', label: 'Ankle'}, {area: 'arms', label: 'Arm'}, {area: 'back', label: 'Back'}, {area: 'chest', label: 'Chest'}, {area: 'legs', label: 'Leg'}, {area: 'butt', label: 'Butt'}, {area: 'neck', label: 'Neck'}, {area: 'face', label: 'Face'} ]>> <<for _t range _tattooAreas>> <<if $player.tattoos[_t.area]>> <<media $player.tattoos[_t.area]>> <<if hasMoney(1000)>> <<capture _t>> <<link "Remove <<=_t.label>> Tattoo (💵1000)">> <<set $player.tattoos[_t.area] = false>> <<goto "TattooRemoval">> <</link>> <</capture>> <<else>> <<set _reqs = {'money': 1000}>> <<linkDisabled _reqs>> You don't have enough money to remove your <<=_t.label>> tattoos <</linkDisabled>> <</if>> <</if>> <</for>> </div> </div> <div class="link-container"> [[Go Back|BeautyClinic]] </div>
<p class="text-center">You are in a bar.</p> <<image "src/locations/bar.jpg">> <div class="link-container"> <<if !$dailyChecks.practiceCharm>> [[Work on your charm skills with the locals|CharmPractice]] <<else>> <<linkDisabled>> You already practiced your charm skills today <</linkDisabled>> <</if>> [[Go Back|District]] </div>
<p class="text-center">You're practicing your charm skills with the locals</p> <<run practiceCharm()>> <div class="link-container"> [[Go Back|Bar]] </div>
<p class="text-center">Here's your phone.</p> <div class="link-container"> <<if !$socialMediaStatus.instagram.status>> [[Open an Instagram Account|Instagram][joinInstagram()]] <<else>> [[Check your Instagram Account|Instagram]] <</if>> <<link "Go Back">> <<goto $returnTo>> <</link>> </div>
<p class="text-center">You took a test as best you can!</p> <<set _testResult = universityTest() >> <<if _testResult.passed>> <<successMessage>> You passed! <</successMessage>> <<else>> <<failMessage>> You failed this test, show up more to classes! <</failMessage>> <</if>> <div class="link-container"> [[Go Back|University]] </div>
<p class="text-center">Social Media</p> <div class="link-container"> <<if !$socialMediaStatus.instagram.status>> [[Open an Instagram Account|Instagram][joinInstagram()]] <<else>> [[Check your Instagram Account|Instagram]] <</if>> [[Go Back|Phone]] </div>
<p class="text-center">Here's your Instagram!</p> <div class="link-container"> <<if !$dailyChecks.instagramPost>> [[Make a random post|Instagram Post][$instagramPost = 'random']] <<if $socialMediaStatus.instagram.totalPosts < 2>> <<linkDisabled>> Make 2 random posts to feel comfortable posting your pictures <</linkDisabled>> <<else>> [[Post a normal selfie|Instagram Post][$instagramPost = 'selfie']] <<if hasExposition(5)>> [[Post a full body picture|Instagram Post][$instagramPost = 'full']] <<else>> <<set _reqs = {'expo': 5}>> <<linkDisabled _reqs>> You're not inhibited enough to post a full body pic <</linkDisabled>> <</if>> <<if hasExposition(10)>> [[Post a bikini picture|Instagram Post][$instagramPost = 'bikini']] <<else>> <<set _reqs = {'expo': 10}>> <<linkDisabled _reqs>> You're not inhibited enough to post a bikini pic <</linkDisabled>> <</if>> <<if hasExposition(20)>> [[Post a thirst trap picture|Instagram Post][$instagramPost = 'thirst']] <<else>> <<set _reqs = {'expo': 20}>> <<linkDisabled _reqs>> You're not inhibited enough to post a thirst trap pic <</linkDisabled>> <</if>> <</if>> <<else>> <<linkDisabled>> You already made a post today <</linkDisabled>> <</if>> [[Go Back|Phone]] </div>
<<run instagramPost($instagramPost)>> <<switch $instagramPost>> <<case 'random'>> <p class="text-center">You posted a random picture</p> <<set _images = ['src/actions/instagram/random/random-1.jpg', 'src/actions/instagram/random/random-2.jpg']>> <<image _images>> <<case 'selfie'>> <p class="text-center">You posted a selfie</p> <<set $images = []>> <<for _i to 1; _i lte 5; _i++>> <<run $images.push("src/actions/instagram/selfie/selfie-" + _i + ".jpg")>> <</for>> <<image $images>> <<case 'full'>> <p class="text-center">You posted a full body pic</p> <<set $images = []>> <<for _i to 1; _i lte 5; _i++>> <<run $images.push("src/actions/instagram/full_body/full-" + _i + ".jpg")>> <</for>> <<image $images>> <<case 'bikini'>> <p class="text-center">You posted a full body bikini pic</p> <<set $images = []>> <<for _i to 1; _i lte 6; _i++>> <<run $images.push("src/actions/instagram/bikini/bikini-" + _i + ".jpg")>> <</for>> <<image $images>> <<case 'thirst'>> <p class="text-center">You posted a thirst trap</p> <<set $images = []>> <<for _i to 1; _i lte 7; _i++>> <<run $images.push("src/actions/instagram/thirst/thirst-" + _i + ".jpg")>> <</for>> <<image $images>> <</switch>> <div class="link-container"> [[Go Back|Instagram]] </div>
<p class="text-center"> You're at the Strip Club, <<if !$jobData.stripper>> you can see they're hiring dancers. <<else>> you work here <<= formatRecurringTime('stripper')>>. <</if>> </p> <<image "src/locations/strip_club.jpg">> <div class="link-container"> <<if !$jobData.stripper>> <<if hasStat('looks', 20) && hasSkill('dancing', 10) && hasExposition(20) && hasCorruption(20)>> [[Apply to be a Dancer|StripClub][$jobData.stripper = true]] <<else>> <<set _reqs = {'looks': 20, 'dancing': 10, 'expo': 20, 'cor': 20}>> <<linkDisabled _reqs>> You don't have the requirements to become a Dancer <</linkDisabled>> <</if>> <</if>> <<if $jobData.stripper && isRecurringTimeMatch('stripper')>> <<if hasEnergy(30) && hasHygiene(50) && hasHunger(30)>> [[Work as a Dancer|StripperWorkPrep]] <<else>> <<set _reqs = {'energy': 30, 'hygiene': 50, 'hunger': 30}>> <<linkDisabled _reqs>> You don't have enough energy, hygiene, or hunger to work as a Dancer <</linkDisabled>> <</if>> <</if>> [[Go Back|Shady District]] </div>
<p class="text-center">How are you planning on working tonight?</p> <div class="link-container"> [[Dance|StripperWork][$stripperWorkType = 'dance']] <<if hasExposition(25) && hasCorruption(25)>> [[Naked Dance|StripperWork][$stripperWorkType = 'nakedDance']] <<else>> <<set _reqs = {'cor': 25, 'expo': 25}>> <<linkDisabled _reqs>> You don't have enough exposition or corruption to work as a Naked Dancer <</linkDisabled>> <</if>> <<if hasCorruption(30) && hasExposition(30)>> [[Private Dance|StripperWork][$stripperWorkType = 'privateDance']] <<else>> <<set _reqs = {'cor': 30, 'expo': 30}>> <<linkDisabled _reqs>> You need more corruption and exposition for Private Dance <</linkDisabled>> <</if>> <<if hasCorruption(35) && hasExposition(35)>> [[Private Sex|StripperWork][$stripperWorkType = 'privateSex']] <<else>> <<set _reqs = {'cor': 35, 'expo': 35}>> <<linkDisabled _reqs>> You need more corruption and exposition for Private Sex <</linkDisabled>> <</if>> <<if hasCorruption(50) && hasExposition(50)>> [[Private Party|StripperWork][$stripperWorkType = 'privateParty']] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> You need more corruption and exposition for Private Party <</linkDisabled>> <</if>> </div>
<<set _result = stripperWork($stripperWorkType)>> <<switch($stripperWorkType)>> <<case 'dance'>> <p class="text-center">You danced on stage for a couple of hours.</p> <<bodyMedia 'actions.work.stripper.dance'>> <<case 'nakedDance'>> <p class="text-center">You did a naked dance on stage for a couple of hours.</p> <<bodyMedia 'actions.work.stripper.naked_dance'>> <<case 'privateDance'>> <p class="text-center">You did some private dances for some customers.</p> <<bodyMedia 'actions.work.stripper.private_dance'>> <<case 'privateSex'>> <p class="text-center">You engaged in some private sexual activities with customers.</p> <<bodyMedia 'actions.work.stripper.private_sex'>> <<case 'privateParty'>> <p class="text-center">You engaged in some private party activities with customers.</p> <<bodyMedia 'actions.work.stripper.private_party'>> <</switch>> <<successMessage>> <p class="font-bold">You've earned:</p> <p class=""><strong>Base Pay</strong>: $ <<= _result.total >></p> <p class=""><strong>Tips</strong>: $ <<= _result.tips >></p> <</successMessage>> <div class="link-container"> [[Go Back|StripClub]] </div>
<div class="link-container"> [[Go Back|StripClub]] </div>
<p>You're at the Tattoo Shop, you can get some tattoos here</p> <<image "src/locations/tattoo_shop.jpg">> <div class="link-container"> <<if hasCorruption(10)>> [[Wrist Tattoo|TattooSelect][$tattooArea = 'wrists']] [[Arm Tattoo|TattooSelect][$tattooArea = 'arms']] [[Leg Tattoo|TattooSelect][$tattooArea = 'legs']] [[Back Tattoo|TattooSelect][$tattooArea = 'back']] [[Chest Tattoo|TattooSelect][$tattooArea = 'chest']] [[Face Tattoo|TattooSelect][$tattooArea = 'face']] [[Butt Tattoo|TattooSelect][$tattooArea = 'butt']] [[Pelvis Tattoo|TattooSelect][$tattooArea = 'pelvis']] <<else>> <<set _reqs = {'cor': 10}>> <<linkDisabled _reqs>> You need at least 10 Corruption to get a tattoo <</linkDisabled>> <</if>> [[Go Back|Shady District]] </div>
<p class="text-center">Which tattoo would you like to get?</p> <div class="grid grid-cols-4 gap-5 mt-3"> <<for _itemKey, _itemObj range $tattooItems[$tattooArea]>> <<set _image = _itemObj.asset >> <div class="default-container gap-1"> <<image _image>> <p class="text-sm text-center"> <<print _itemObj.name>> </p> <p class="text-sm text-center"> Cost: $<<print _itemObj.cost>> </p> <<capture _itemKey>> <<if $player.tattoos[$tattooArea]>> <span class="text-xs text-gray-400 text-center">You already have a tattoo in this area</span> <<elseif !wantBuyItem(_itemKey, 'tattoo', $tattooArea)>> <span class="text-xs text-gray-400 text-center">You don't feel comfortable getting this.</span> <<linkDisabled $tattooItems[$tattooArea][_itemKey].reqs>> Buy! <</linkDisabled>> <<elseif canBuyItem(_itemKey, $tattooItems[$tattooArea])>> <<link "Get Tattoo!">> <<set $player.tattoos[$tattooArea] = $tattooItems[$tattooArea][_itemKey].asset>> <<run useMoney($tattooItems[$tattooArea][_itemKey].cost)>> <<goto "TattooParlor">> <</link>> <<else>> <<set _reqs = {'money': _itemObj.cost}>> <<linkDisabled _reqs>> Buy! <</linkDisabled>> <</if>> <</capture>> </div> <</for>> </div> <div class="link-container"> [[Go Back|TattooParlor]] </div>
<div class="link-container"> [[Go Back|Shady District]] </div>
<p class="text-center">You're on a Sex Shop.</p> <<image "src/locations/sex_shop.jpg">> <div class="link-container"> [[Browse Clothing Items|SexShopClothingItems]] [[Browse Items|SexShopItems]] <<if hasMoney(50)>> <<if !$dailyChecks.boothWatchedPorn>> [[Go into a adult video booth (💵50)|Video Booth][useMoney(50)]] <<else>> <<linkDisabled>> You already watched porn here today <</linkDisabled>> <</if>> <<else>> <<set _reqs = {'money': 50}>> <<linkDisabled _reqs>> You don't have money to rent a booth <</linkDisabled>> <</if>> <<if $gloryHoleData.work>> [[Work as a GloryHole Pleasurer|GloryHole]] <</if>> [[Go Back|Shady District]] </div>
<p class="text-center">You're on a video booth, you can see a collection of adult movies and a TV, there's weirdly a bunch of holes on your room, you can't see anything through it.</p> <<if $gloryHoleData.invite && !$gloryHoleData.work>> <<infoPanel>> <p>You are approached by the Sex Shop owner, he's asking you if you want a regular job as a GloryHole pleasurer?</p> <div class="link-container"> [[Accept|GloryHole][$gloryHoleData.work = true; $gloryHoleData.invite = false; $jobData.glory = true]] [[Decline (you'll be able to accept in another time)|Video Booth][$gloryHoleData.invite = false]] </div> <</infoPanel>> <</if>> <div class="link-container"> [[Porn|BoothPornWatch]] [[Go Back|Sex Shop]] </div>
<p class="">Sex Shop Clothing</p> <<flash>> <hr> <<set _shopFilter = {'filter': 'sex_shop', 'slot': 'outfit'}>> <<set _shop = 'sex_shop'>> <<set $returnToShop = passage()>> <<clothingShop _shopFilter $returnToShop _shop>> <div class="link-container"> [[Go Back|Sex Shop][$filter = null]] </div>
<p>What kind of item are you looking for?</p> <div class="grid grid-cols-4 gap-5"> <<for _itemKey, _itemObj range $sexShopItems>> <<set _image = _itemObj.asset >> <div class="default-container gap-1"> <<image _image>> <p class="text-sm text-center"> <<print _itemObj.name>> </p> <p class="text-sm text-center"> Cost: $<<print _itemObj.cost>> </p> <<capture _itemKey>> <<if hasItem(_itemKey, 'single')>> <span class="text-xs text-gray-400 text-center">You've already bought this item.</span> <<elseif !wantBuyItem(_itemKey, 'sex_shop')>> <span class="text-xs text-gray-400 text-center">You don't feel comfortable buying this item.</span> <<elseif canBuyItem(_itemKey, $sexShopItems)>> <<link "Buy!">> <<set $selectedItem = _itemKey>> <<goto "ClothingPurchase">> <</link>> <<else>> <<set _reqs = {'money': _itemObj.cost}>> <<linkDisabled _reqs>> Buy! <</linkDisabled>> <</if>> <</capture>> </div> <</for>> </div> <div class="link-container"> [[Go Back|Sex Shop]] </div>
<p class="text-center">You're watching Porn!</p> <<bodyMedia 'actions.work.gloryhole.booth'>> <<type 200ms>>.....<</type>> <<timed 1s>> <p class="text-center">While you were watching, a dick emerges from a hole in the wall.</p> <</timed>> <<run watchPorn('booth')>> <<timed 1s>> <<set _video_src = ['src/actions/work/gloryhole/present/present-3.mp4'] >> <<video _video_src>> <</timed>> <<timed 1s>> <div class="link-container"> <<if hasCorruption(20)>> [[Do something about it!|GloryHole]] <<else>> <<set _reqs = {'cor': 20 }>> <<linkDisabled _reqs>> You're not corrupted enough to do something about this <</linkDisabled>> <</if>> [[Go Back|Sex Shop]] </div> <</timed>>
<<if !$ghAction>> <p class="text-center">You're sitting in a gloryhole cabin!</p> <<bodyMedia 'actions.work.gloryhole.present'>> <<else>> <<switch $ghAction>> <<case 'hj'>> <<hjSequence>> <<case 'bj'>> <<bjSequence>> <<case 'sex'>> <<ghSexSequence>> <<case 'anal'>> <<ghAnalSequence>> <<case 'multiple'>> <<ghMultipleSequence>> <<case 'invite'>> <<ghInviteSequence>> <</switch>> <</if>> <<if !$ghAction>> <<flash>> <div class="link-container"> <<if hasEnergy(30) && hasHunger(30)>> [[HandJob|GloryHole][$ghAction = 'hj']] <<if hasCorruption(20)>> [[BlowJob|GloryHole][$ghAction = 'bj']] <<else>> <<set _reqs = {'cor':20 }>> <<linkDisabled _reqs>> You are not corrupted enough to give a Blowjob <</linkDisabled>> <</if>> <<if hasCorruption(25)>> [[Sex|GloryHole][$ghAction = 'sex']] <<else>> <<set _reqs = {'cor':25 }>> <<linkDisabled _reqs>> You are not corrupted enough to have sex <</linkDisabled>> <</if>> <<if hasCorruption(30)>> [[Anal|GloryHole][$ghAction = 'anal']] <<else>> <<set _reqs = {'cor':30 }>> <<linkDisabled _reqs>> You are not corrupted enough to give have anal sex <</linkDisabled>> <</if>> <<if hasCorruption(35)>> [[Multiple|GloryHole][$ghAction = 'multiple']] <<else>> <<set _reqs = {'cor':35 }>> <<linkDisabled _reqs>> You are not corrupted enough to handle multiple dicks <</linkDisabled>> <</if>> <<if hasCorruption(40) && hasExposition(30) >> [[Invite|GloryHole][$ghAction = 'invite']] <<else>> <<set _reqs = {'cor':40, 'expo': 30 }>> <<linkDisabled _reqs>> You are not corrupted and inhibited enough to make an invite <</linkDisabled>> <</if>> <<else>> <<set _reqs = {'energy': 30, 'hunger': 30}>> <<linkDisabled _reqs>> You don't have enough energy for work in the GloryHole <</linkDisabled>> <</if>> [[Go Back|Sex Shop]] </div> <</if>>
<<set $moneyMade = modelWork($modelWork)>> <<switch $modelWork>> <<case 'amateur_photoshoot'>> <p class="text-center">You're doing an amateur photoshoot</p> <<bodyMedia 'actions.work.modelling.amateur_photoshoot'>> <<case 'catalog_photoshoot'>> <p class="text-center">You're doing a catalog photoshoot</p> <<bodyMedia 'actions.work.modelling.catalog_photoshoot'>> <<case 'amateur_runway'>> <p class="text-center">You're doing an amateur runway show</p> <<bodyMedia 'actions.work.modelling.amateur_runway'>> <<case 'magazine_photoshoot'>> <p class="text-center">You're doing a magazine photoshoot</p> <<bodyMedia 'actions.work.modelling.magazine_photoshoot'>> <<case 'international_runway'>> <p class="text-center">You're doing an international runway show</p> <<bodyMedia 'actions.work.modelling.international_runway'>> <<case 'bikini_lingerie_photoshoot'>> <p class="text-center">You're doing a bikini/lingerie photoshoot</p> <<bodyMedia 'actions.work.modelling.bikini_lingerie_photoshoot'>> <<case 'erotic_photoshoot'>> <p class="text-center">You're doing an erotic photoshoot</p> <<bodyMedia 'actions.work.modelling.erotic_photoshoot'>> <<case 'adult_photoshoot'>> <p class="text-center">You're doing an adult photoshoot</p> <<bodyMedia 'actions.work.modelling.adult_photoshoot'>> <</switch>> <<successMessage>> You made $ $moneyMade <</successMessage>> <div class="link-container"> [[Go Back|Modelling]] </div>
<p class="text-center">You're on a porn studio</p> <<image "src/locations/porn_studio.jpg">> <div class="link-container"> <<if !$jobData.pornstar>> <<if hasCorruption(50) && hasExposition(50)>> [[Apply to be a Pornstar|PornStudio][$jobData.pornstar = true]] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to be a pornstar <</linkDisabled>> <</if>> <<else>> <<if isRecurringTimeMatch('pornStudio')>> <<if $pornStarData.weeklyVideos < $pornStarData.maxWeeklyVideos>> <<if hasEnergy(30) && hasHunger(40) && hasHygiene(50)>> [[Make a Movie|PornStudioPrep]] <<else>> <<set _reqs = {'energy': 30, 'hunger': 40, 'hygiene': 50}>> <<linkDisabled _reqs>> You don't have enough energy, hunger or hygiene to make a movie <</linkDisabled>> <</if>> <<else>> <<linkDisabled>> You can only record $pornStarData.maxWeeklyVideos videos a week, sorry <</linkDisabled>> <</if>> <</if>> <</if>> [[Go Back|Shady District]] </div>
<p class="text-center">Which scene are you looking to do this time?</p> <div class="link-container"> [[Solo Scene|PornStudioWork][$pornStudioScene = 'solo']] <<if hasCorruption(50) && hasExposition(50)>> [[Straight Scene|PornStudioWork][$pornStudioScene = 'straight']] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene <</linkDisabled>> <</if>> <<if hasCorruption(55) && hasExposition(55)>> [[Anal Scene|PornStudioWork][$pornStudioScene = 'anal']] <<else>> <<set _reqs = {'cor': 55, 'expo': 55}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Anal Scene <</linkDisabled>> <</if>> <<if hasCorruption(60) && hasExposition(60)>> [[Lesbian Scene|PornStudioWork][$pornStudioScene = 'lesbian']] <<else>> <<set _reqs = {'cor': 60, 'expo': 60}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Lesbian Scene <</linkDisabled>> <</if>> <<if hasCorruption(65) && hasExposition(65)>> [[Group Scene|PornStudioWork][$pornStudioScene = 'group']] <<else>> <<set _reqs = {'cor': 65, 'expo': 65}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Group Scene <</linkDisabled>> <</if>> <<if hasCorruption(70) && hasExposition(70)>> [[Gangbang Scene|PornStudioWork][$pornStudioScene = 'gangbang']] <<else>> <<set _reqs = {'cor': 70, 'expo': 70}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Gangbang Scene <</linkDisabled>> <</if>> <<if hasCorruption(85) && hasExposition(85)>> [[Bukkake/Blowbang Scene|PornStudioWork][$pornStudioScene = 'bukkake']] <<else>> <<set _reqs = {'cor': 85, 'expo': 85}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Bukkake Scene <</linkDisabled>> <</if>> <<if hasCorruption(90) && hasExposition(90)>> [[Rough + Piss Play Scene (⚠️)|PornStudioWork][$pornStudioScene = 'piss']] <<else>> <<set _reqs = {'cor': 90, 'expo': 90}>> <<linkDisabled _reqs>> You need to be more corrupted and uninhibited to do a straight scene Piss Play Scene <</linkDisabled>> <</if>> [[Go Back|PornStudio]] </div> <<if hasCorruption(90) && hasExposition(90)>> <p class="mt-8 text-sm">⚠️ These scenes may be more intense, feel free to hit the back button as soon as it starts</p> <</if>>
<p class="text-center">You're shooting a scene</p> <<set _results = pornStarWork($pornStudioScene)>> <<switch $pornStudioScene>> <<case 'solo'>> <<bodyMedia 'actions.work.pornstar.solo'>> <<case 'straight'>> <<bodyMedia 'actions.work.pornstar.straight'>> <<case 'anal'>> <<bodyMedia 'actions.work.pornstar.anal'>> <<case 'lesbian'>> <<bodyMedia 'actions.work.pornstar.lesbian'>> <<case 'group'>> <<bodyMedia 'actions.work.pornstar.group'>> <<case 'gangbang'>> <<bodyMedia 'actions.work.pornstar.gangbang'>> <<case 'bukkake'>> <<bodyMedia 'actions.work.pornstar.bukkake'>> <<case 'piss'>> <<bodyMedia 'actions.work.pornstar.piss'>> <</switch>> <<successMessage>> You earned $ _results.total. You also got $ _results.passiveIncome as passive income! <</successMessage>> <div class="link-container"> [[Go Back|PornStudio]] </div>
<p class="text-left">Here's a general guide for progressing in the game, there's no "endgame" for now but here's some tips to see all the content:</p> <ul class="list-disc list-inside space-y-2 text-left mx-auto text-base"> <li>Planned early path would be joining Uni and working as a Waitress.</li> <li>Get the phone early and start posting on instagram and watch porn on the sex shop for early 😈Corruption and 👙Exposition.</li> <li>Check your notes to see more details of yourself, more info on your jobs and your passive income/expenses .</li> <li>You can work in the office after you get a diploma</li> <li>Computer gives you access to Onlyfans, Streamer Job, Porn Watching and Developer Carreer</li> <li>You get a steady GloryHole gig by going in multiple times.</li> <li>Focus on a getting a steady income before focusing on looks</li> <li>You can improve your looks by doing surgery, applying makeup and improving your fitness</li> <li>You get to choose a path in the modelling job after working 7 times and having > 40 Looks and going to work again.</li> <li>You unlock the Porn Studio + Porn Star career after doing Modelling Adult Photoshoots 5 times and seeing the message after you go to work again.</li> <li>You can achieve max looks by getting all the surgeries + max makeup.</li> <li>Unlock Prostitution by wearing one of the "Prostitute Dress" and visiting the Shady District</li> <li>RealEstate it's purely cosmetic.</li> <li>Use your mirror to check for new portraits.</li> <li>Chef Job it's SFW AI media with little rewards.</li> <li>Streamer Job it's AI media with progressive slutty content based on corruption.</li> <li>Gain Dancing skills in the Gym to apply for the Stripper job.</li> <li>🎓 Intelligence and 💬 Charisma are not being too much used, so don't go too hard for those for now.</li> <li>Perks are unlocked usually at every 50 interactions, they are not providing anything for now, just a nice dialog media.</li> </ul> <div class="link-container"> <<link "Go Back">> <<goto $returnTo>> <</link>> </div>
<p class="text-center">Here's a cheat menu for quick access / progress</p> <div class="link-container"> [[Add 1000 💵|CheatMenu][gainMoney(1000)]] [[Add 1 😈|CheatMenu][gainCorruption(1)]] [[Add 1 👙|CheatMenu][gainExposition(1)]] [[Add 1 🎮|CheatMenu][learnSkill('gaming')]] [[Add 1 💻|CheatMenu][learnSkill('programming')]] [[Add 1 🍳|CheatMenu][learnSkill('cooking')]] [[Add 1 💄|CheatMenu][learnSkill('makeup')]] [[Add 1 💃|CheatMenu][learnSkill('dancing')]] [[Max Hunger|CheatMenu][$player.hunger = 100]] [[Max Hygiene|CheatMenu][$player.hygiene = 100]] [[Max Energy|CheatMenu][$player.energy = 100]] [[Max Looks (all surgeries + max fitness + makeup)|CheatMenu][maxLooks()]] <<if !$uniData.graduated>> [[Get Diploma|CheatMenu][$uniData.graduated = true;$uniData.enrolled = false;$uniData.classesTaken = 0; $uniData.daysSinceEnroll = 0; $weeklyChecks.uni.status = false;]] <<else>> <<linkDisabled>> You have already graduated. <</linkDisabled>> <</if>> <<link "Go Back">> <<goto $returnTo>> <</link>> </div>
<<if !$prostituteData.experienced>> <<set _roll = rngRoll(50)>> <<if _roll>> <<successMessage>> Success! You managed to grab a client. <</successMessage>> <p class="text-center">How do you plan on working the streets today?</p> <<else>> <<failMessage>> You failed to grab a client. <</failMessage>> <<run useEnergy(10)>> <<run skipTime(1,10)>> <<bodyMedia 'actions.work.prostitute.fail'>> <div class="link-container"> [[Go Back|Shady District]] </div> <</if>> <<else>> <p class="text-center">How do you plan on working the streets today?</p> <<set _roll = true>> <</if>> <<if _roll>> <<bodyMedia 'actions.work.prostitute.walk'>> <div class="link-container"> [[Handjob|ProstituteWork][$prostituteWork = 'handjob']] <<if hasCorruption(40) && hasExposition(40)>> [[Blowjob|ProstituteWork][$prostituteWork = 'blowjob']] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> You need to be more corrupted or uninhibited to do a blowjob <</linkDisabled>> <</if>> <<if hasCorruption(45) && hasExposition(45)>> [[Sex|ProstituteWork][$prostituteWork = 'sex']] <<else>> <<set _reqs = {'cor': 45, 'expo': 45}>> <<linkDisabled _reqs>> You need to be more corrupted or uninhibited to have sex <</linkDisabled>> <</if>> <<if hasCorruption(45) && hasExposition(45)>> [[Lesbian Sex|ProstituteWork][$prostituteWork = 'lesbian']] <<else>> <<set _reqs = {'cor': 45, 'expo': 45}>> <<linkDisabled _reqs>> You need to be more corrupted or uninhibited to have lesbian sex <</linkDisabled>> <</if>> <<if hasCorruption(50) && hasExposition(50)>> [[Group|ProstituteWork][$prostituteWork = 'group']] <<else>> <<set _reqs = {'cor': 50, 'expo': 50}>> <<linkDisabled _reqs>> You need to be more corrupted or uninhibited to do group sex <</linkDisabled>> <</if>> [[Go Back|Shady District]] </div> <</if>>
<p class="text-center">You're whoring yourself</p> <<set _results = prostituteWork($prostituteWork)>> <<set _media = 'actions.work.prostitute.' + $prostituteWork>> <<bodyMedia _media>> <<successMessage>> You made $ _results.pay <</successMessage>> <div class="link-container"> [[Go Back|Shady District]] </div>